Stub(…)收到意外消息(…)(没有args)

我尝试使用RR编写测试。 我需要的是模型对象的存根。

describe ApplicationController do subject(:application_controller) { ApplicationController.new } let(:messages) { ['a1', 'a2', 'a3' ] } let(:model) { Object.new } it 'should copy errors to flash' do stub(model).error_messages { messages } flash[:error] == nil subject.copy_errors_to_flash(model) flash[:error].should == messages end end 

我得到的是

 ApplicationController should copy errors to flash Failure/Error: stub(model).error_messages { messages } Stub # received unexpected message :error_messages with (no args) # ./spec/controllers/application_controller_spec.rb:10:in `block (2 levels) in ' 

我不知道我做错了什么。 我想我会按照文档…

您在此行上调用模型存根上的方法’error_messages:

 stub(model).error_messages { messages } 

我认为你真的想在这里做点其他事情,最有可能的是:

 model.should_receive(:error_messages).and_return(messages) 

这会为error_messages创建一个存根方法,并且只要你的spec测试调用model.error_messages,它就会响应你的messages数组。