Fabrizio Regini
Fabrizio Regini

Reputation: 1500

Using any_instance and should_receive together is not working

Simplifying my problem:

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

This test fails with the following message:

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

Why?

(I'm using rspec-rails (2.14.0) with all dependencies updated.)

Upvotes: 1

Views: 148

Answers (2)

Luca Guidi
Luca Guidi

Reputation: 1211

Have you tried with:

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

Upvotes: 0

Ju Liu
Ju Liu

Reputation: 3999

This works for me

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

gives me

[17:40] arkham ~/Desktop [2.0.0-p247]
↳ $ ruby resolver_spec.rb
.

Finished in 0.0011 seconds
1 example, 0 failures

Maybe there is something else interfering?

Upvotes: 1

Related Questions