ruby-on-rails - 编写无效的 FactoryGirl 工厂/特征是个坏主意吗?

标签 ruby-on-rails unit-testing factory-bot rspec2 traits

听 Giant Robots Smashing Into Other Giant Robots 播客,我听说您希望 FactoryGirl 工厂最小化,只提供那些使对象在数据库中有效的属性。话虽这么说,谈话还继续说特征是一种非常好的方法,可以根据将来可能发生变化的属性来定义特定行为。

我想知道定义特征以故意使验证失败以清理规范代码是否也是一个好主意。这是一个例子:

factory :winner do
  user_extension "7036"
  contest_rank 1
  contest

  trait :paid do
    paid true
  end 

  trait :unpaid do
    paid false
  end 

  trait :missing_user_extension do
    user_extension nil 
  end 

  trait :empty_user_extension do
    user_extension ""
  end 

end

将允许我在我打算验证失败的测试中调用 build_stubbed(:winner, :missing_user_extension)。我想我可以通过将这些坏工厂嵌套在另一个名为 :invalid_winner 的工厂下来进一步导致这种显式失败,但我不太确定是否有必要这样做。我最感兴趣的是听听其他人对这个概念的看法。

最佳答案

不,这不是一个好主意,它不会在一段时间后让您的规范清晰易懂,稍后当您的代码发展时,那些今天失败的工厂可能不再失败,您将很难审查所有规范。

最好为一个明确标识的事物编写测试。如果您想检查保存是否因缺少强制参数而失败,只需使用常规工厂编写并添加参数以覆盖工厂中的值:

it 'should fail' do
  create :winner, user_extension: nil 
  ...
end

关于ruby-on-rails - 编写无效的 FactoryGirl 工厂/特征是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984447/

相关文章:

Android UI 单元测试 : how to find dynamically added checkbox?

ruby-on-rails - 如何使用 Factory Girl 定义多个关联对象?

ruby-on-rails - factory_girl 的 Cucumber 步骤和可选关联

ruby-on-rails - 如何在不属于 Assets 管道的 Rails 4 中渲染图像

ruby-on-rails - Rails 4 Checkbox helper-table - Many_to_many

c# - 模拟/创建事件CRM实体

ruby - 在 ruby​​ 中测试线程代码

ruby-on-rails - 如果给定的工厂存在,我可以问 Factory Girl 吗?

ruby-on-rails - rails : How to send file from S3 to remote server

ruby-on-rails - Jbuilder 部分路径