FactoryGirl不会保存记录

时间:2013-07-12 03:26:43

标签: ruby-on-rails save factory-bot

以下是此问题:Factory_Girl not generating unique records

未创建需求记录的原因是因为未正确创建用户记录(或至少是关联)。

鉴于以下工厂:

factory :user do
  sequence(:name) { |n| "foo#{n}" }
  password "fooBar_1"
  email { "#{name}@example.com" }
  app_setting
  factory :adminUser do |user|
    user.role_assignments { |ra| [ra.association(:adminAssignment)] }
  end
  factory :reader do |user|
    user.role_assignments { |ra| [ra.association(:readerAssignment)] }
  end
end

factory :role_assignment do
  factory :adminAssignment do |ra|
    ra.association :role, factory: :adminRole
  end
  factory :readerAssignment do
    association :role
  end
end

factory :role do
  roleName "reader"
  factory :adminRole do |r|
    r.roleName "Administrator"
  end
end

以下代码片段应该为用户提供相关的role_assignment记录,其中包含roleName为“Administrator”的相关角色记录

user = FactoryGirl.create(:adminUser)

这实际上可以在rails控制台中运行 - 记录按预期在数据库中创建。但是,在安装过程中执行代码行时,不会保存记录,依赖于角色分配的测试也会失败。

有关在哪里查找未提交记录的原因的任何建议?

1 个答案:

答案 0 :(得分:1)

事实证明,工厂在Rails控制台中运行得不是很好。虽然正在所有正确的表中创建记录,但role_assignment记录的用户ID为nil。显然,我用来处理相关的许多格式是不正确的。

正确的格式来自https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md,如下(对于我的情况):

factory :user do
sequence(:name) { |n| "foo#{n}" }
    password "fooBar_1"
    email { "#{name}@example.com" }
    app_setting
 factory :adminUser do
   after(:create) do |user, evaluator|
     FactoryGirl.create_list(:adminAssignment, 1, user: user)
   end
 end

我仍然需要清理用户工厂的其他部分,所以我没有在这里包含它们。这将创建用户,然后创建角色和role_assignment,然后正确链接。

我的另一个问题实际上源于这样一个事实,即我正在对应用程序进行重大改造,并且在编写工厂之前没有回顾需求模型中的范围定义,因此我创建的记录永远不会出现在范围。糟糕。