如何测试是否创建了数据库记录

时间:2014-01-26 22:28:58

标签: ruby-on-rails ruby unit-testing rspec

我有一些简单的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

1 个答案:

答案 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