我有一些简单的ActiveRecord模型让我们说:
class Order < ActiveRecord::Base
def self.for_bucket(bucket)
create! bucket_id: bucket.id
end
end
目前的测试是:
it 'creates new persistent object' do
obj = subject.find_for_bucket(bucket)
expect{ subject.find_for_bucket bucket }.to change{ described_class.count }.by(1)
end
作为聪明的开发人员,我想通过将NullDB引入项目来删除数据库调用。
如何在不触及数据库的情况下测试方法Order.for_bucket
?
答案 0 :(得分:1)
如果您想避免访问数据库,我担心您无法期望described_class.count
实际增加。但你可以嘲笑.create!
方法,这可以说是足够好的。实际上在调用.create!
之后创建对象是你可能不需要测试的东西,因为它已经被你选择的ORM测试,无论是否是ActiveRecord。
it 'creates new persistent object' do
expect(subject).to receive(:create!).with({ :bucket_id => bucket.id })
subject.for_bucket(bucket)
end