以下是此问题: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控制台中运行 - 记录按预期在数据库中创建。但是,在安装过程中执行代码行时,不会保存记录,依赖于角色分配的测试也会失败。
有关在哪里查找未提交记录的原因的任何建议?
答案 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,然后正确链接。
我的另一个问题实际上源于这样一个事实,即我正在对应用程序进行重大改造,并且在编写工厂之前没有回顾需求模型中的范围定义,因此我创建的记录永远不会出现在范围。糟糕。