需要在rspec中调用stub()和should_receive()以获取视图部分规范

时间:2012-09-06 04:31:54

标签: ruby-on-rails ruby-on-rails-3 rspec rspec2 rspec-rails

我在rspec(v2.8)

中与should_receive()有些混淆

我的理解是它既存在方法 - 就像stub()那样 - 并设置了这个存根方法的调用期望。

然而,在尝试使用它来截断从视图partial调用的辅助方法时,我不断收到错误:

Failure/Error: render 'invitations/header'
 ActionView::Template::Error:
   undefined method `require_javascript' for #<#<Class:0x7fe21d03d9f8>:0x7fe21cfd0c40>

最后,我必须添加一个stub()方法以及来使测试成功通过。此代码如下所示 - 当我删除之前的块时,我得到上面显示的错误。

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 个答案:

答案 0 :(得分:0)

删除该存根时,您的测试失败,因为它期望view.should_receive(:require_javascript).with('expandable_section')

Stubbing意味着你基本上是重影方法调用。当您render视图时,您的“存根”就像该方法实际上会返回某些内容一样。

您可以在此处阅读更多内容:https://relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs