Кажется, я понял что-то не так. У меня есть классПочему этот метод не называется?
module Spree
class OmnikassaPaymentResponse
#...
# Finds a payment with provided parameters trough ActiveRecord.
def payment(state = :processing)
Spree::Payment.find(:first, :conditions => { :amount => @amount, :order_id => @order_id, :state => state }) || raise(ActiveRecord::RecordNotFound)
end
end
end
Который specced в Rspec:
describe "#payment" do
it 'should try to find a Spree::Payment' do
Spree::Payment.any_instance.stub(:find).and_return(Spree::Payment.new)
Spree::Payment.any_instance.should_receive(:find)
Spree::OmnikassaPaymentResponse.new(@seal, @data).payment
end
end
Это, однако, всегда бросает ActiveRecord::RecordNotFound
. Я ожидал any_instance.stub(:find).and_return()
, чтобы убедиться, что всякий раз, когда я вызываю #find
на любой экземпляр, который у меня есть, Spree :: Payment, он что-то возвращает.
Другими словами: я бы ожидал, что stub.and_return
избежит попадания в || raise(ActiveRecord::RecordNotFound)
. Но это не так.
Является ли мое предположение неправильным, мой код? Что-то другое?
Быстрее меня! ;) – lucapette
Спасибо! FWIW: также '.should_receive (: find)' должен вызываться без 'any_instance'. – berkes
@berkes, да, вы правы. –