【问题标题】:Factory_Girl not generating unique recordsFactory_Girl 未生成唯一记录
【发布时间】:2013-07-04 00:51:02
【问题描述】:

我正在将我的应用程序转换为使用工厂而不是带有 Factory_Girl_Rails 的固定装置。我定义了以下工厂:

factory :requirement do
  sequence(:reqTitle) {|t| "Test Requirement #{t}"}
  ignore do
    categoryName " "
    categoryAbbr " "
 end

  reqText "This is a test general requirement for the purpose of, um, testing things"
  status "Approved"
  factory :reqWithCat do
    category
  end
  factory :reqWithNamedCat do
    category {create(:category, catName: categoryName, catAbbr: categoryAbbr)}
  end
  factory :reqFromUserRequirement do
    user_requirement
  end
end

然后,在设置部分,我运行以下 sn-p:

(0..5).each do |x|
      requirement = create(:reqWithCat)
      requirement.ind_requirements {|ir| [create(:ind_requirements)]}
end
(0..5).each do |x|
    create(:reqWithNamedCat, categoryName: "User Interface", categoryAbbr: "UI")
end

但是,我的测试失败了,显然是因为没有创建记录(例如,需求控制器上的索引测试告诉我,当应该有 10 条记录时返回了 0 条记录)。我在调试模式下运行测试,发现创建的每个需求都具有完全相同的 id 值。另外,每条记录的序列值都相同。

我相信重复记录无法保存,这就是我得到 0 回报的原因。但是,我看不到我设置错误的内容。我在这里错过了什么?

【问题讨论】:

  • 被告知您有 0 条记录而不是 1 条记录这一事实让我认为您可能没有重复记录问题。这可能是一个愚蠢的问题,但在您当前调用create 的所有情况下都尝试调用FactoryGirl.create?此外,您的循环可以更简洁地标记为5.times do ... end,就您在此处向我们展示的情况而言,您不需要块参数。
  • 不一定是个愚蠢的问题。我曾调用 include FactoryGirl::Syntax::Methods,但这并不意味着它正在工作。不幸的是,我仍然返回 0 条记录。
  • 感谢 5.times 的推荐。它看起来更干净。
  • 好的,下一个问题。我以前从未见过这样的嵌套工厂。您是在尝试继承,还是这种实现有其他用法?
  • 我有很多对多的关系——例如需求和类别之间的关系,所以这应该适用于这个目的。我可能会尝试回过头来创建基本要求,看看我是否可以让它发挥作用。

标签: ruby-on-rails sequence factory-bot uniqueidentifier


【解决方案1】:

一旦我修复了用户工厂以正确创建相关的许多,然后我发现我根据我在模型中定义范围的方式错误地编写了这个工厂。一旦解决了这个问题,“损坏”的测试就开始工作了。

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多