【问题标题】:rspec-mocks 'allow' returns undefined methodrspec-mocks 'allow' 返回未定义的方法
【发布时间】:2013-06-24 16:07:54
【问题描述】:

我正在使用 RSpec2 v2.13.1,似乎应该包含 rspec-mocks (https://github.com/rspec/rspec-mocks)。它肯定列在我的 Gemfile.lock 中。

但是,当我运行测试时,我得到了

     Failure/Error: allow(Notifier).to receive(:new_comment) { @decoy }
 NoMethodError:
   undefined method `allow' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fc302aeca78>

这是我要运行的测试:

require 'spec_helper'

describe CommentEvent do

  before(:each) do
    @event = FactoryGirl.build(:comment_event)
    @decoy = double('Resque::Mailer::MessageDecoy', :deliver => true)
    # allow(Notifier).to receive(:new_comment) { @decoy }
    # allow(Notifier).to receive(:welcome_email) { @decoy }
  end

  it "should have a comment for its object" do
    @event.object.should be_a(Comment)
  end

  describe "email notifications" do
    it "should be sent for a user who chooses to be notified" do
      allow(Notifier).to receive(:new_comment) { @decoy }
      allow(Notifier).to receive(:welcome_email) { @decoy }
      [...]
    end

目标是消除通知器和消息诱饵,以便我可以测试我的 CommentEvent 类是否确实在调用前者。我在 rspec-mocks 文档中读到了 before(:all) 中不支持存根,但它在 before(:each) 中也不起作用。救命!

感谢您的任何见解...

【问题讨论】:

    标签: ruby-on-rails ruby rspec rspec-mocks


    【解决方案1】:

    Notifier,顾名思义,是一个常量。

    您不能使用allowdouble 将常量加倍。相反,您需要使用stub_const

    # Make a mock of Notifier at first
    stub_const Notifier, Class.new
    
    # Then stub the methods of Notifier
    stub(:Notifier, :new_comment => @decoy)
    

    编辑:修复了 stub() 调用的语法错误

    【讨论】:

    • 你凭什么说allowdouble是一样的?根据文档或来源,它们似乎并不相同。
    • @PeterAlfvin,检查一下:github.com/rspec/rspec-mocks#method-stubs " rspec-mocks 支持 3 种形式来声明方法存根"
    • @PeterAlfvin,根据示例代码效果是一样的。无论如何,我删除了与答案无关的最后一行。我很少使用allow,当doublestub 足够好时,这似乎是不必要的。
    • 在问我的问题之前,我实际上只是读了一遍。我猜你正在以我不习惯的方式使用“相同”。据我了解,allow 指定现有对象的行为,而double 创建一个新对象,然后指定该对象的行为。当一个是另一个的别名时,或者至少当一个可以用另一个来表示时,我倾向于使用“相同”。
    • 这并没有解决我的问题......而且你有一个花括号结尾而不是一个括号。我的错误是 NoMethodError: undefined method `allow' for #<0x007fc3c2372f20>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多