0

我一直对 rspec (v2.8) 中的 should_receive() 感到困惑

我的理解是,它既对方法进行了存根——就像 stub() 所做的那样——并设定了将调用这个存根方法的期望。

但是,在尝试使用它来存根从视图部分调用的辅助方法时,我不断收到错误消息:

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

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

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() 方法才能成功通过。所以我很困惑为什么在这种情况下需要它?

4

1 回答 1

0

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

存根意味着您基本上是在重影方法调用。当您render查看您的“存根”时,就好像该方法实际上会返回一些东西一样。

你可以在这里阅读更多:https ://relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs

于 2016-02-11T19:31:01.007 回答