【问题标题】:Using any_instance and should_receive together is not working一起使用 any_instance 和 should_receive 不起作用
【发布时间】:2013-11-28 16:26:40
【问题描述】:

简化我的问题:

  it 'should call resolve', focus: true do
    SubscriptionEventResolver.any_instance.should_receive(:resolve)
    SubscriptionEventResolver.new(double().as_null_object).resolve
  end

此测试失败并显示以下消息:

Failures:

  1) SubscriptionEvent should call resolve
     Failure/Error: SubscriptionEventResolver.any_instance.should_receive(:resolve)
       (#<Mocha::ClassMethods::AnyInstance:0x007f89c40a5488>).resolve(any args)
           expected: 1 time with any arguments
           received: 0 times with any arguments
     # ./spec/models/subscription_event_spec.rb:66:in `block (2 levels) in <top (required)>'
     # -e:1:in `<main>'

Finished in 0.44287 seconds
1 example, 1 failure

为什么?

(我正在使用更新了所有依赖项的 rspec-rails (2.14.0)。)

【问题讨论】:

    标签: rspec mocking rspec-rails


    【解决方案1】:

    这对我有用

    require 'rspec/autorun'
    
    class SubscriptionEventResolver < Struct.new(:event)
    end
    
    describe SubscriptionEventResolver do
      it 'should call resolve' do
        SubscriptionEventResolver.any_instance.should_receive(:resolve)
        SubscriptionEventResolver.new(double().as_null_object).resolve
      end
    end
    

    给我

    [17:40] arkham ~/Desktop [2.0.0-p247]
    ↳ $ ruby resolver_spec.rb
    .
    
    Finished in 0.0011 seconds
    1 example, 0 failures
    

    也许还有其他干扰?

    【讨论】:

    • 你是对的,完全排除我的应用环境使这个测试通过。关于在哪里看的任何线索?
    • 我已经看到这个错误告诉了一些关于 mocha 的信息,会不会是测试使用的是 mocha 的 any_instance 而不是 rspec 的呢?
    • 我可以看到我一开始没有注意到的 shoulda-matchers gem 需要 Mocha。感谢您指出。我将此标记为正确答案,因为您将我引向了正确的方向。
    • 更准确地说,对于未来的读者,我的问题是 shuolda-matchers gem 不是最新的。从 1.4.2 更新到 2.4.0 解决了这个问题。
    【解决方案2】:

    您是否尝试过:

    it 'should call resolve', focus: true do
      resolver = double('resolver')
      resolver.should_receive(:resolve)
      SubscriptionEventResolver.stub(:new).and_return(resolver)
    
      SubscriptionEventResolver.new(double('argument').as_null_object).resolve
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-05
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多