Saat menulis tes RSpec, saya mendapati diri saya menulis banyak kode yang terlihat seperti ini untuk memastikan bahwa sebuah metode dipanggil selama pelaksanaan tes (demi argumen, anggap saja saya tidak bisa benar-benar menginterogasi status objek setelah panggilan karena operasi yang dilakukan metode tidak mudah untuk melihat efeknya).
describe "#foo"
it "should call 'bar' with appropriate arguments" do
called_bar = false
subject.stub(:bar).with("an argument I want") { called_bar = true }
subject.foo
expect(called_bar).to be_true
end
end
Yang ingin saya ketahui adalah: Apakah ada sintaks yang lebih bagus yang tersedia dari ini? Apakah saya kehilangan beberapa RSpec funky yang akan mengurangi kode di atas menjadi beberapa baris? should_receive
terdengar seperti itu harus melakukan ini tetapi membaca lebih lanjut kedengarannya seperti itu tidak persis seperti itu.
ruby-on-rails
ruby
rspec
Mikey Hogarth
sumber
sumber
should_receive
, jadi saya pikir pertanyaan itu akan membantu.Jawaban:
sumber
called_bar
. Itu hanya sebuah tanda untuk memastikan bahwa metode tersebut dipanggil, tetapiexpect(...).to receive(...)
Anda sudah menutupinya. Ini lebih jelas dan semantikDalam
rspec
expect
sintaks baru ini akan menjadi:sumber
Di bawah ini harus bekerja
Dokumentasi: https://github.com/rspec/rspec-mocks#expecting-arguments
sumber
have_received
(setelah fakta pendekatan "mata-mata"), bukanhas_received
, yang bukan bagian dari versi RSpec mana pun yang saya tahu.Untuk sepenuhnya mematuhi sintaks RSpec ~> 3.1 dan
rubocop-rspec
opsi default untuk aturanRSpec/MessageSpies
, inilah yang dapat Anda lakukan denganspy
:Jika Anda tidak menggunakan rubocop-rspec atau menggunakan opsi non-default. Anda tentu saja dapat menggunakan RSpec 3 default dengan harapan.
sumber