我有一个构建器类,应该创建新记录,让我们说:
ObjectBuilder creates Object
Object
这是ActiveRecord::Base
继承的类。
我想在Rspec
中测试是否创建了特定记录。
但仅仅测试是否会创建特定记录without database call
就足够了。那么我怎样才能将AR对象存根来检查呢?
回应潜在的答案我无法将NullDB
集成到我的项目中,我不会在Object
中创建自定义方法,该方法将负责创建记录,并且很容易存根。我想依靠ActiveRecord
界面。
答案 0 :(得分:2)
我认为您需要确定您要在此测试的确切内容。如果您正在测试ActiveRecord是否有效,那么您将走错路。 ActiveRecord本身已经过全面测试,您在应用程序中自行添加的任何其他测试都有些多余。
在这里查看ActiveRecord测试,它们如何工作,它们涵盖的内容等等: https://github.com/rails/rails/tree/master/activerecord/test
我认为您可能需要测试的是,当您在应用程序中调用@object.save
时,您的对象是否能够被保存。如果是这种情况,那么只需调用#valid?
方法就可以轻松地测试它,而无需真正保存对象。如果对象无效,ActiveRecord将不会保存它。
这样的东西就足够了:
require 'spec_helper'
describe Object do
before(:each) do
object = Object.new(attr1: 'required')
end
it "is valid with required attributes" do
expect(object).to be_valid
end
it "is not valid without an attr1" do
object.attr1 = nil
expect(object).not_to be_valid
end
end
您可以通过将rspec-collection_matchers
gem添加到项目中并执行以下操作来更全面地测试验证:
it "is not valid without an attr1" do
object.attr1 = nil
expect(object).to have(1).errors_on(:attr1)
end