我似乎明白错了。我有一个班级
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
在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()
确保无论何时,无论我在Spree :: Payment的任何实例上调用#find
,它都会返回一些内容。
换句话说:我希望stub.and_return
避免进入|| raise(ActiveRecord::RecordNotFound)
。但事实并非如此。
我的假设错了,我的代码?还有别的吗?
答案 0 :(得分:2)
在您的情况下,find
不是实例方法,而是Spree::Payment
的类方法。这意味着您应该直接将其存根,而不是any_instance
:
Spree::Payment.stub(:find).and_return(Spree::Payment.new)