2013-07-10 1 views
67

Следующий фрагмент кода работает, как ожидалось:Object.any_instance should_receive против ожидать(), чтобы получить

Object.any_instance.should_receive(:subscribe) 

Но при использовании нового RSpec ожидания он не работает:

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

Ошибка is:

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

Как я могу выполнить эту работу с ожиданием() для получения?

ответ

141

В настоящее время существует не очень хорошо документированный метод, называемый expect_any_instance_of, который обрабатывает специальный случай any_instance. Вы должны использовать:

expect_any_instance_of(Object).to receive(:subscribe) 

Google expect_any_instance_of для получения дополнительной информации.

+0

+1 для «не очень хорошо документировано». Все-таки дело. http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ExampleMethods:expect_any_instance_of – johngraham

+0

Я использую 'allow_any_instance_of'. Это псевдоним этого метода? – rubyprince

+0

@rubyprince Они разные, с помощью методов allow stubbing и ожидают, что методы тестирования поведения. Например, 'allow (my_obj) .to receive (: method_name) .and_return (true)' stubs 'my_obj.method_name()' поэтому, если он вызывается в тесте, он просто возвращает 'true'. 'expect (my_obj) .to receive (: method_name) .and_return (true)' не изменяет никакого поведения, но устанавливает ожидаемое испытание, если 'my_obj.method_name()' не вызывается позже в тест или не возвращает true. – Saigo