RSpec'de "tekrarlanmalı" daha çok kez nasıl söylenir


112

Bu benim testimde var

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

ancak nesne bu yöntem çağrısını iki kez aldığında, yapmalıyım

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

Böyle bir şey söylemenin bir yolu var mı?

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

Yanıtlar:


214

Bu modası geçmiş. Lütfen aşağıdaki Uri'nin cevabını kontrol edin

2 kez:

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

tam olarak n kere:

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

en az n kez:

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

Daha fazla ayrıntı https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts adresinde Receive Counts altında

Umarım yardımcı olur =)


3
Görünüşe göre bu işe yaramıyor olabilir any_instance?
Jared Beck

@YoLudke Bilmiyorum
Jared Beck

2
Uri'nin cevabında belirtilen yeni sözdizimini kullanmalısınız .
theblang

61

expectRspec'in yeni sözdizimi şu şekilde görünecektir:

2 kez:

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

tam olarak n kere:

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

en az n kez:

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

1
have_receivedSözdizimi da çalışır. expect(Project).to have_received(:find).exactly(n).timesvb.
David Tuite

0

@JaredBeck dikkat çekti. Çözüm any_instancearamada benim için işe yaramadı .

Herhangi bir örnek için should_receive yerine saplama kullanmaya başladım.

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

Bu herhangi bir hayır için çalışacak. Bazen olsa.



0

should_receivebunun tersine any_instance, sınıfın mesajı belirtilen sayıda almasını bekler.

any_instance Öte yandan genellikle bir yöntemi saplamak için kullanılır.

Yani ilk durum, test etmek istediğimiz bir beklentidir, ikincisi ise bir yöntemi bir sonraki satıra geçerek devam edebiliriz.


1
Drenmi Neredeyse bir yıl önce eklediğim bir gönderiye birkaç virgül eklemek için ayırdığınız zamanı takdir ediyorum ... Cevabın teknik kısmında herhangi bir değişiklik yokmuş gibi görünmüyordu ... Neden olumsuz oy verdiniz bunun için ben ...?
amnsan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.