FactoryGirl:'工厂未注册'将工厂添加到has_many关系时出错

时间:2016-03-30 08:30:04

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

我有2个工厂档案

规格/工厂/ cars.rb

规格/工厂/ users.rb的

用户可以有很多车,我想为这种情况创建一个特殊的特性。

进入我的汽车工厂:

FactoryGirl.define do
  factory :car do
    ...

    trait :is_blue do
        color 'blue'
    end
  end

  factory :blue_car, parent: :car do
    is_blue 
  end
end

我的用户工厂

FactoryGirl.define do

  factory :user do
    ...

    trait :with_cars do
      cars  [ FactoryGirl.create(:blue_car) ]
    end

  end


  factory :user_with_cars, parent: :user  do
    with_cars
  end

end

当我想使用' user_with_cars'工厂进入我的用户规划'文件我有一个未注册的工厂:blue_car'错误

示例:

context 'with cars' do
  subject { create(:user_with_cars) }

  it 'should make some stuff' do
    expect(subject.cars).not_to be_empty

    ...
  end
end

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

我改变了创造关系的方式。 在添加关系的特性中,我使用'after(:create)'回调。

规格/工厂/ users.rb的

FactoryGirl.define do

  factory :user do
    ...

    trait :with_cars do
      after(:create) do |user|
        user.cars << create(:blue_car)
      end
   end


   factory :user_with_cars, parent: :user  do
     with_cars
   end
end