工厂未注册:user(ArgumentError)在另一个工厂中为factorygirl.create(:user)声明变量时

时间:2016-01-31 10:31:32

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

这对我来说是一个混乱:

我为用户提供了一个工厂:

FactoryGirl.define do
  factory :user do
    email     { Faker::Internet.email }
    password  { Faker::Internet.password }
    name      { Faker::Name.name }
  end

end

然后,我试图在另一个工厂定义中创建一个用户,如下所示:

FactoryGirl.define do
  user = FactoryGirl.create(:user)
  factory :order do
    user                  { user }
    status                1
    delivery_preferences  { "#{Faker::Address.street_address}, #{Faker::Address.city}." }
    instant_delivery      false
    status_changes        ["#{rand(5)}, #{Time.now}"]
    order_products_ids    { user.cart.order_products_ids[0..rand(3)] }
  end

end

但我一直收到错误:

  

工厂未注册:user(ArgumentError)

我肯定做错了什么,但我真的看不到它。哈哈,我需要一双额外的眼睛。这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您未正确声明关联 - 使用user = FactoryGirl.create(:user)基本上不起作用,因为在您定义工厂时无法保证声明用户工厂。

即使这个工作也比所有工厂都共享相同的用户记录,因为变量是在工厂定义的范围内创建的 - 而不是在FG初始化记录时运行的块。

您可以通过以下方式声明关联:

FactoryGirl.define do
  factory :order do
    user # FactoryGirl does lazy loading when the factory is used
    status                1
    delivery_preferences  { "#{Faker::Address.street_address}, #{Faker::Address.city}." }
    instant_delivery      false
    status_changes        ["#{rand(5)}, #{Time.now}"]
    order_products_ids    { user.cart.order_products_ids[0..rand(3)] }
  end
end