2013-01-17 18 views
9

Tôi muốn sử dụng Mocks trong các thử nghiệm rspec như thế nào.Rspec Mocks trên any_instance với chính xác (n) lần

klass.any_instance.should_receive(:save).exactly(2).times.and_return(true) 

nhưng tôi nhận được một thông báo lỗi như:

'Thông điệp "tiết kiệm" được nhận bởi < #Object> nhưng đã được nhận bởi < #Object>'

tạm thời Tôi sử dụng sơ khai nhưng đối với độ chính xác muốn sử dụng mocks

+0

thể trùng lặp của [Làm thế nào để nói "bất kỳ \ _instance" "nên \ _receive" bất kỳ số lượng lần trong RSpec] (http://stackoverflow.com/questions/9800992/how-to-say-any-instance-should-receive-any-number-of-times-in-rspec) – SztupY

Trả lời

19

documentation của any_instance.should_receive là:

Use any_instance.should_receive to set an expectation that one (and only one) 
instance of a class receives a message before the example is completed. 

Vì vậy, bạn đã chỉ định chính xác một đối tượng sẽ nhận được cuộc gọi save hai lần và không phải 2 đối tượng đó sẽ nhận được cuộc gọi save một lần.

Nếu bạn muốn đếm các cuộc gọi được thực hiện bởi các trường hợp khác nhau mà bạn sẽ phải creative như:

save_count = 0 
klass.any_instance.stub(:save) { save_count+=1 } 
# run test 
save_count.should == 2 
+0

tôi muốn hai đối tượng khác nhau should_receive (: lưu) trong một ví dụ. Trên thực tế tôi đang tạo ra 'n' đối tượng mới thông qua looping và muốn kiểm tra nó nhấn phương pháp lưu. Xin lỗi vì tiếng Anh của tôi không tốt. –

+0

Bạn phải sử dụng ví dụ thứ hai của tôi – SztupY

Các vấn đề liên quan