Factory_Girl linting和Rspec之间的区别是be_valid

时间:2015-05-13 22:11:16

标签: ruby-on-rails rspec tdd automated-tests factory-bot

测试工厂 [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

1 个答案:

答案 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方法对于您正确构建工厂的测试最有用。