【问题标题】:Recoursive factories with FactoryGirls工厂女孩的递归阶乘
【发布时间】:2013-10-31 21:16:48
【问题描述】:

我正在寻找一种创建递归工厂的舒适方法。 在我的应用程序中,用户有很多软件,我想用 n 个相关软件“一次性”创建一个用户。 这是我的代码:

FactoryGirl.define do
 factory :user do |f|
     f.sequence(:username) { |n| "user#{n}" }
 end

 trait :with_software do
    ignore do
         n 3
    end

 after :create do |user, evaluator|
     FactoryGirl.create_list :software, evaluator.n, :user => user
 end

而软件定义如下

 factory :software do |f|
     f.sequence(:name) { |n| "software#{n}" }
     f.association :user
 end

当我数字时:

user1 = FactoryGirl.create(:user, :with_software)

FactoryGirls 创建一个具有 3 个相关软件条目的用户。问题是软件名称总是“software#{n}”。 如何将唯一的软件名称指定为 :user.name + "software#{n}" ?

【问题讨论】:

    标签: ruby-on-rails rubygems ruby-on-rails-4 factory-bot


    【解决方案1】:

    首先你所说的不是递归的,但这并不重要。

    您可以通过以下方式实现您想要的:

    工厂:软件做|f| f.sequence(:name) { |n| “软件#{n}”} f.关联:用户 特征:with_matching_name 做 f.name { "#{f.user.name}#{f.name}" } 结尾 结尾 工厂:用户做|f| f.sequence(:username) { |n| “用户#{n}”} 特征:with_software 做 忽略做 n 3 结尾 结尾 在 :create do |user, evaluator| 之后 FactoryGirl.create_list :software, evaluator.n, :user => user, :with_matching_name 结尾 结尾

    如果可行,你可以试试。

    【讨论】:

    • 我从 create_list 收到以下错误:语法错误,意外 '\n',需要 tASSOC。它让我发疯
    • 好像不喜欢create_list中的行尾,想看“=>”。您也可以尝试不使用 create_list 而是使用 n.times 然后使用 FactoryGirl.create 时会发生什么。
    • 同样的错误:语法错误,意外的 '\n',期待 tASSOC (SyntaxError)。该错误与 :with_matching_name 选项有关。,P.S.感谢您的宝贵帮助
    • 您也可以尝试在trait内部的after create循环中设置软件的名称,然后保存软件。也许它有一些问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多