2013-11-28 5 views
1

Упрощая мою проблему:Использование any_instance и should_receive вместе не работает

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-реек (2.14.0) со всеми зависимостями обновляются.)

ответ

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 

Может быть, есть что-то еще вмешивается?

+0

Вы правы, за исключением моего приложения среды полностью делает этот тест проход. Любая подсказка о том, на что смотреть? –

+0

Я видел, что ошибка сообщает что-то о мокке, может быть, что тест использует any_instance mocha вместо rspec? –

+0

Могу видеть, что мокко требуется, чтобы камень, который я не заметил сначала. Спасибо за указание. Я отмечаю это как правильный ответ, потому что вы направили меня в правильном направлении. –

0

Вы пробовали с:

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 
Смежные вопросы