Bagaimana cara mengatakan "should_receive" lebih banyak di RSpec


112

Saya memiliki ini dalam pengujian saya

Project.should_receive(:find).with(@project).and_return(@project)

tetapi ketika objek menerima panggilan metode itu dua kali, saya harus melakukannya

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

Apakah ada cara untuk mengatakan sesuatu seperti

Project.should_receive(:find).with(@project).and_return(@project).times(2)

Jawaban:


214

Ini sudah ketinggalan zaman. Silakan periksa jawaban Uri di bawah ini

untuk 2 kali:

Project.should_receive(:find).twice.with(@project).and_return(@project)

tepat n kali:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)

setidaknya untuk n kali:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)

detail lebih lanjut di https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts di bagian Terima Hitungan

Semoga membantu =)


3
Sepertinya mungkin ini tidak berhasil any_instance?
Jared Beck

@YoLudke Saya tidak tahu
Jared Beck

2
Harus menggunakan sintaks baru yang disebutkan dalam jawaban Uri .
theblang

61

expectSintaks baru rspec akan terlihat seperti ini:

untuk 2 kali:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)

tepat n kali:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)

setidaknya untuk n kali:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)

1
The have_receivedsintaks juga bekerja. expect(Project).to have_received(:find).exactly(n).timesdll.
David Tuite

0

@Jared menunjukkan. Solusinya tidak berhasil untuk saya saat any_instancemenelepon.

Untuk setiap contoh saya akhirnya menggunakan rintisan daripada should_receive.

Project.any_instance.stub(:some_method).and_return("value")

Ini akan berhasil untuk semua no. kali sekalipun.



0

should_receive, sebagai lawan any_instance, mengharapkan bahwa kelas menerima pesan beberapa kali.

any_instance di sisi lain umumnya digunakan untuk mematikan suatu metode.

Jadi kasus pertama adalah ekspektasi yang ingin kami uji, sedangkan kasus kedua adalah melewati metode ke baris berikutnya sehingga kami dapat melanjutkan.


1
Drenmi Saya menghargai waktu yang Anda luangkan untuk menambahkan beberapa koma ke kiriman yang telah saya tambahkan hampir setahun yang lalu ... Sepertinya tidak ada perubahan pada aspek teknis dari jawaban ... Mengapa Anda tidak memilih saya untuk ini ...?
amnsan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.