我在rspec(v2.8)中与should_receive()有些混淆
我的理解是它既存在方法 - 就像stub()那样 - 并设置了这个存根方法将被调用的期望 .
但是,在尝试使用它来截断从视图partial调用的辅助方法时,我不断收到错误:
Failure/Error: render 'invitations/header'
ActionView::Template::Error:
undefined method `require_javascript' for #<#<Class:0x7fe21d03d9f8>:0x7fe21cfd0c40>
最后,我不得不添加一个stub()方法 as well 来使测试成功通过 . 此代码如下所示 - 当我删除之前的块时,我得到上面显示的错误 .
describe 'invitation/header' do
before do
view.stub(:require_javascript) # Why is this required ?!
end
it "should initialize the expandable section javascript" do
view.should_receive(:require_javascript).with('expandable_section')
render 'invitations/header'
end
...
end
请注意,我在此文件中有许多其他测试,其中没有一个需要stub()方法才能成功传递 . 所以我很困惑为什么在这种情况下我需要它?
1 回答
删除该存根时,您的测试失败,因为它期望
view.should_receive(:require_javascript).with('expandable_section')
.Stubbing意味着你基本上是重影一个方法调用 . 当您
render
视图时"stub"的行为就像该方法实际上会返回一些内容一样 .你可以在这里阅读更多:https://relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs