Rspec 3.6, kesalahan Rails 5: jumlah argumen yang salah (diberikan 2, diharapkan 1) untuk permintaan `post`

Saya baru saja memulai proyek baru di Rails 5, (yang pertama, meskipun saya memiliki beberapa proyek di Rails 4.x.) dan saya mengalami masalah dengan spesifikasi pengontrol.

describe RequestsController, :type => :controller do

  it "receives new request" do
    post :accept_request, my_params
  end

end

Mengembalikan kesalahan:

 Failure/Error: post :accept_request, my_params

 ArgumentError:
   wrong number of arguments (given 2, expected 1)

Saya memahami telah terjadi perubahan dalam strategi pengujian pilihan untuk pengontrol dengan Rails 5 seperti yang disebutkan di Rel Sehari-hari, khususnya, mengalihkan pengujian pengontrol ke spesifikasi permintaan, namun tidak ada kabar tentang perubahan pada metode dasar pengujian pengontrol ini.


person Nick    schedule 24.05.2017    source sumber


Jawaban (1)


Tampaknya Rails 5 mengharapkan argumen kata kunci dan bukan argumen hash, yang merupakan perubahan dari versi sebelumnya. Selain itu, argumen pertama adalah URL, bukan tindakan. Mencoba

post some_url, params: some_hash
person zetetic    schedule 24.05.2017
comment
Luar biasa! Bisakah Anda ceritakan bagaimana Anda menemukan ini? Atau dokumentasi lebih lanjut tentang argumen kata kunci? Saya telah melakukan cukup banyak pencarian, termasuk Catatan Peningkatan Rails dan bagian Peningkatan GitHub RSpec dan ini masih luput dari perhatian saya. Sekadar bantuan tentang cara untuk tetap mendapatkan informasi terbaru tentang hal-hal seperti ini atau pembaruan Rails 5 halus lainnya. - person Nick; 25.05.2017
comment
Selain itu, FWIW, post masih menerima tindakan saja, tidak memerlukan url. - person Nick; 25.05.2017
comment
Mengenai bagaimana saya menemukan ini, saya telah menjawab pertanyaan tentang pengujian pengontrol selama beberapa tahun, jadi saya langsung tahu bahwa pernyataan ini berfungsi di versi sebelumnya. Itu mempersempitnya menjadi perubahan di Rails 5. Pencarian cepat mengarah ke postingan blog ini: blog.bigbinary.com/2016/04/19/ di mana peralihan ke argumen kata kunci disebutkan. - person zetetic; 26.05.2017
comment
Info bagus di artikel itu, tidak yakin bagaimana saya melewatkannya. Terima kasih! - person Nick; 26.05.2017
comment
Argumen pertama sama sekali bukan URL, melainkan nama tindakan. Mengapa ini merupakan jawaban yang diterima? - person Andrew Koster; 26.09.2019
comment
@AndrewKoster lihat github.com/rails /rails/gumpalan/. Dibutuhkan jalur atau URL. Panduan Pengujian Rails juga menggunakan url dalam contohnya. Pada Rails 5, pengujian pengontrol adalah subkelas dari ActionDispatch::IntegrationTest. Sebelum Rails 5, mereka berasal dari ActionController::TestCase, yang mengambil nama tindakan. - person zetetic; 27.09.2019
comment
Ya, sepertinya saya bekerja dari dokumentasi yang sudah ketinggalan zaman. Kami bahkan tidak seharusnya menggunakan pengujian pengontrol lagi, pengujian tersebut telah diganti dengan pengujian permintaan (yang menggunakan URL sebagai argumen pertama). - person Andrew Koster; 27.09.2019