如何使用has_many关联创建有效工厂

时间:2014-10-14 10:07:40

标签: ruby-on-rails factory-bot

我一直试图让这个工作看official documentationthis blog post,并在这里看了一些例子。无论我尝试什么,我都会遇到错误。

我正在寻找一个工作示例来了解测试的结构;我正在使用Factory Girl 4.4.1和Rspec 3。

我设法创建一个有效对象的唯一方法是这样做,但它不是构建我的对象的正确方法,因为我想先在动物模型上运行验证,然后再运行animal_image。 / p>

FactoryGirl.define do
  factory :animal_image do
   animal_id 1
   image { File.open("#{Rails.root}/spec/fixtures/yp2.jpg") }
 end 
end

file = FactoryGirl.create(:animal_image)
#<AnimalImage id: 101, animal_id: 1, image: "yp2.jpg", created_at: "2014-10-14 10:08:55", updated_at: "2014-10-14 10:08:55">

我的模特

class Animal < ActiveRecord::Base
  has_many :animal_images, dependent: :destroy
end

class AnimalImage < ActiveRecord::Base
  belongs_to :animal
end

1 个答案:

答案 0 :(得分:1)

试试这个:

FactoryGirl.define do
  factory :animal do

    ignore do
      images_count 5
    end

    after(:create) do |animal, evaluator|
      create_list(:animal_image, evaluator.images_count, animal: animal)
    end

  end 
end

FactoryGirl.define do
  factory :animal_image do

    image { File.open("#{Rails.root}/spec/fixtures/yp2.jpg") }

  end 
end

a = FactoryGirl.create(:animal)
a.animal_images.count
=> 5

a = FactoryGirl.create(:animal, images_count: 1)
a.animal_images.count
=> 1

更多信息here