给定一个方法为self.fetch_payment_method
的模型:
def self.fetch_payment_method
name = "Omnikassa"
pm = Spree::PaymentMethod.find(:first, :conditions => [ "lower(name) = ?", name.downcase ]) || raise(ActiveRecord::RecordNotFound)
end
用rspec测试来测试这个:
it 'should find a payment_method' do
Spree::PaymentMethod.new(:name => "Omnikassa").save
@omnikassa.class.fetch_payment_method.should be_a_kind_of(Spree::PaymentMethod)
end
我想改进它,因此它不会测试整个堆栈和数据库。为此,我只想在类Spree::PaymentMethod
上调用时将“:find”存根。但是:
it 'should find a payment_method' do
Spree::PaymentMethod.any_instance.stub(:find).and_return(Spree::PaymentMethod.new)
@omnikassa.class.fetch_payment_method.should be_a_kind_of(Spree::PaymentMethod)
end
不起作用。我对整个BDD / TDD事物都很陌生,对我来说,顽固和嘲弄仍然是一件神奇的事情;所以我很可能会误解顽固和回归究竟在做什么。
我应该如何存根SomeActiveRecordModel.find?
答案 0 :(得分:4)
你正在做的一切正确,除了应该在Spree::PaymentMethod
类本身而不是在它的实例上调用存根方法
通常的做法是使用此存根返回某个实例,而不仅仅是新的实例:
it 'should find a payment_method' do
payment_meth = mock_model(Spree::PaymentMethod)
Spree::PaymentMethod.stub!(:find).and_return(payment_meth)
@omnikassa.class.fetch_payment_method.should be_equal(payment_meth)
end
顺便说一句,你在哪里初始化@omnikassa对象?