【问题标题】:FactoryGirls multiple associationsFactoryGirls 多个关联
【发布时间】:2015-09-19 06:06:51
【问题描述】:

我很难思考这个问题。我对 FactoryGirl 很陌生,所以这可能会在某处清楚地解释,如果是这种情况,我深表歉意。这当然不是一个独特的问题,也许我的 Google 技能还没有达到标准。

我正在处理订单,属于类别,属于客户。我正在尝试建立一个下了 5 个订单的客户,但是当它尝试建立类别时我不断抛出独特的错误(这需要一个唯一的名称)。

功能/customer_spec.rb

RSpec.feature "Customer management", :type => :feature do
    scenario "Customer with orders has order history" do
        customer = create(:customer, :with_5_completed_orders)
        visit customer_path(customer)
        expect(page).to have_content("Recent Orders")
    end
end

工厂/客户.rb

FactoryGirl.define do

    factory :customer do

        ...

        trait :with_5_completed_orders do
            after :create do |customer|
            create_list(:order_line, 5, :completed, :customer => customer)
        end
      end
   end
end

工厂/order_line.rb

FactoryGirl.define do
    factory :order_line do
        ....
        product
        ....
    end
end

工厂/product.rb

FactoryGirl.define do

    factory :product do |f|
        ....
        category
        ....
    end
end

工厂/类别.rb

FactoryGirl.define do
    sequence :category_name do |n|
      "category-#{n}"
    end

   factory :category do
       name { generate(:category_name) } 
   end
end

【问题讨论】:

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


    【解决方案1】:

    如果我没猜错,你的类别名称唯一性有问题。

    您可以使用 sequences 通过 FactoryGirl 生成唯一的类别名称:

    sequence :category_name do |n|
      "category-#{n}"
    end
    
    factory :category do
      name { generate(:category_name) } 
    end
    

    FactoryGirl 关于sequences 的文档也值得一读。

    如果您打算重复使用同一类别两次,您可以先创建一个并在所有订单中重复使用它:

    trait :with_5_completed_orders do
      after :create do |customer|
        cat = generate(:category)
        create_list(:order_line, 5, :completed, customer: customer, category: cat)
      end
    end
    

    【讨论】:

    • 虽然这确实解决了唯一性问题,但如果我想在同一类别中创建五个订单怎么办?
    • @RobertJohn 你在哪里定义订单的类别?我在你的代码中看不到它
    • 更正 订单有商品,商品属于某类。
    • @RobertJohn 我不确定order_line 结构。您可以通过在after :create 块中创建类别来重用类别
    • 你的意思是我的设计可能不好,还是我没有提供足够的关于 order_line 结构的信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多