测试工厂与 [Factory_Girl Lint] 1和 RSpec 之间有什么区别:
...
it 'has a valid factory' do
expect(build(:foo)).to be_valid
end
...
我是否正确假设 Factory_Girl Lint 检查架构/数据库级别验证,例如null: false
, Rspec期望be_valid 检查模型级别验证如validates_presence_of
?
答案 0 :(得分:1)
Rspec的be_valid
期望基本上只是在模型上调用valid?
,因此只测试ActiveRecord验证。但是,我相信FactoryGirl的lint方法不仅可以创建模型,还可以保存模型,并且可以测试ActiveRecord验证和任何数据库级验证(ActiveRecord验证已经涵盖了这些验证)。 )。请注意,如果由于ActiveRecord验证违规而导致模型实例保存失败,那么在您修复问题并再次测试之前,该模型不会针对数据库进行测试。
在实际层面上,我发现Rspec的be_valid
期望在测试特定的有效性违规时最有用。例如:
some_record = SomeRecord.new(...minimum set of valid properties...)
some_record.property = 'invalid value'
some_record.should_not be_valid
some_record.error.full_messages.should include('expected error for the given property')
而FactoryGirl的lint方法对于您正确构建工厂的测试最有用。