2013-11-14 2 views
1

Я новичок в RSpec, так что несите меня. У меня есть объект с порядком, и я накладываю метод на этот объект. Я вызываю другой метод на этом объекте, который затем вызывает метод, который я забиваю (и этот заглушка, похоже, работает, потому что я помещал отладчики вокруг указанного вызова метода и возвращал его правильно. Плюс я отбросил отладчик в фактическом методе потому что это не было ударом, так что, похоже, все было в порядке).RSpec stubbing issue - заглушка, похоже, работает, но не принимается

Но когда я звоню @ order.should_receive, я получаю «ожидаемый: blah_method с (любыми аргументами) один раз, но получил его 0 раз».

Я не уверен, почему should_receive не работает, и я не уверен, что я делаю неправильно. Любая помощь? Кстати, я на RSpec 1.3.2.

it 'should be called when blah blah blah' do 
    @order.stub!(:blah_method).and_return true 
    #import_foobar_order calls @order.blah_method 
    #order_hash is irrelevant here, just a json obj converted to a hash 
    @order.import_foobar_order(@order, order_hash, website) 
    @order.should_receive(:blah_method).at_least(:once) 
end 

ответ

2

should_receive идет перед вызовом, и вам не нужно окурок, если вы используете should_receive (вы можете окурок прямо здесь)

it 'should be called when blah blah blah' do 
    @order.should_receive(:blah_method).at_least(:once).and_return(true) 
    @order.import_foobar_order(@order, order_hash, website) 
end 
+1

Вы ответили ему в то же время, что и я, но это смешно, как у нас есть тот же ответ – Timbinous

+0

Бам, спасибо! Я думал, что мне нужно сначала заглушить метод, объявить, что он должен получить, а затем вызвать метод. Но ваш путь работает! – user1717344

1

should_receive довольно много выступает в качестве заглушки. Вы устанавливаете это, прежде чем выполнять свой метод. Поэтому, чтобы тест работал, вы сделаете это.

it 'should be called when blah blah blah' do 
    @order.should_receive(:blah_method).at_least(:once).and_return(true) 
    @order.import_foobar_order(@order, order_hash, website) 
end 
Смежные вопросы