2013-07-10 39 views
67

Các đoạn mã sau đây làm việc như mong đợi:Object.any_instance should_receive vs mong đợi() để nhận

Object.any_instance.should_receive(:subscribe) 

Nhưng khi sử dụng kỳ vọng rspec mới nó không hoạt động:

expect(Object.any_instance).to receive(:subscribe) 

Các lỗi là:

expected: 1 time with any arguments 
received: 0 times with any arguments 

làm thế nào tôi có thể làm công việc này với mong đợi() để nhận?

Trả lời

141

Hiện tại, phương pháp không được viết rất tốt được gọi là expect_any_instance_of xử lý trường hợp đặc biệt any_instance. Bạn nên sử dụng:

expect_any_instance_of(Object).to receive(:subscribe) 

Google expect_any_instance_of để biết thêm thông tin.

+0

+1 cho "không được ghi nhận rất tốt". Vẫn là trường hợp. http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ExampleMethods:expect_any_instance_of – johngraham

+0

Tôi đã sử dụng 'allow_any_instance_of'. Đó có phải là bí danh của phương pháp này không? – rubyprince

+0

@rubyprince Chúng khác nhau, với các phương pháp cho phép stubbing hành vi và mong đợi phương pháp thử nghiệm cho hành vi. Ví dụ, 'allow (my_obj) .to nhận (: method_name) .and_return (true)' stubs 'my_obj.method_name()' vì vậy nếu nó được gọi trong thử nghiệm, nó chỉ trả về 'true'. 'mong đợi (my_obj) .to nhận (: method_name) .and_return (true)' không thay đổi bất kỳ hành vi nào, nhưng thiết lập một kỳ vọng kiểm tra thất bại nếu 'my_obj.method_name()' không được gọi sau trong kiểm tra hoặc không trả lại đúng sự thật. – Saigo