【问题标题】:FactoryGirl Does Not Save RecordsFactoryGirl 不保存记录
【发布时间】:2013-07-12 03:26:42
【问题描述】:

这是对这个问题的后续: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

以下代码的 sn-p 应生成具有相关 role_assignment 记录的用户,其相关角色记录的角色名称为“Administrator”

user = FactoryGirl.create(:adminUser)

这实际上将在 rails 控制台中工作 - 记录按预期在数据库中创建。但是,在设置过程中执行该行代码时,不会保存记录,并且依赖于角色分配的测试会失败。

有什么建议可以从哪里找出未提交记录的原因?

【问题讨论】:

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


    【解决方案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
    

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

    我的另一个问题实际上源于我正在对应用程序进行重大改造并且在编写工厂之前没有回顾需求模型中的范围定义,所以我创建的记录永远不会存在范围。哎呀。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多