Этот вопрос немного устарел, но, найдя здесь свой путь, я подумал, что отвечу на него, предполагая, что rspec-mocks v3.
Заглушка объекта заранее, а затем утверждение с помощью have_received
работает хорошо, когда вам важно, чтобы объект получил определенное сообщение, а не чтобы он только получил сообщение.
Тонкая разница между receive(:...)
и have_received(:...)
Чтобы продолжить исходный вопрос и предположить, что он был переписан в rspec-mocks v3, моим решением было бы:
allow(Logger).to receive(:write)
get '/'
expect(Logger).to have_received(:write).with('Log message 1')
Обратите внимание, что утверждение важно размещать в конце, так как оно проверяет состояние заглушки при вызове, а не при завершении, как это принято.
person
gondalez
schedule
22.03.2018
Logger.should_receive(:write).at_least(:once)
. Или вам нужно утверждать точное сообщение? - person Sergio Tulentsev   schedule 21.10.2014