我试图根据http://railscasts.com/episodes/121-non-active-record-model在我的Ruby on Rails应用程序中创建一个非ActiveRecord模型。我现在很难测试它。
我的app/models/sms.rb
文件中有以下课程。
class Sms
def initialize
# Do stuff here
end
def deliver
# Do some stuff here
end
end
我无法在我的Sms类上模拟传递方法。
it 'should do someting' do
@sms = mock(Sms)
@sms.should_receive(:deliver).and_return(true)
post :create, :user_id => @user.id
flash[:notice].should == "SMS sent successfully."
response.should redirect_to(some_url)
end
在我的控制器代码中,我有一行显示@sms.deliver
。然而上面给出了以下错误:
Failure/Error: @sms.should_receive(:deliver).and_return(true)
(Mock Sms).deliver(any args)
expected: 1 time
received: 0 times
任何指针?
答案 0 :(得分:2)
以@开头的变量是实例变量。控制器引用的@sms与规范定义的@sms不同。
尝试更改
@sms = mock(Sms)
@sms.should_receive(:deliver).and_return(true)
到
Sms.any_instance.should_receive(:deliver).and_return(true)
答案 1 :(得分:2)
如果你的RSpec版本没有any_instance
方法,你需要在课程上存根:new
:
@sms = mock(Sms)
Sms.stub(:new).and_return(@sms)
@sms.should_receive(:deliver).and_return(true)