【问题标题】:Difference between Factory_Girl linting and Rspec's expect to be_validFactory_Girl linting 和 Rspec 的 expect to be_valid 之间的区别
【发布时间】:2015-05-13 22:11:15
【问题描述】:

测试工厂[Factory_Girl Lint]1RSpec的有什么区别:

...
it 'has a valid factory' do 
  expect(build(:foo)).to be_valid
end
...

我是否正确假设 Factory_Girl Lint 检查架构/数据库级别的验证,例如 null: false,而 Rspec 的期望是_valid 检查模型级别的验证,例如validates_presence_of?

【问题讨论】:

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


    【解决方案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 方法对于测试您是否正确构建了工厂最有用。

    【讨论】:

    • 谢谢!这意味着我希望在我的测试套件中同时包含 Lint 和 Rspec 期望,以确保我的工厂构建正确并且我的模型通过 ActiveRecord 和 DB 级别的验证。对吗?
    • @Dimitry_N 是的,完全正确。
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多