我如何创建具有关联的对象
我有Post
模型和PostsPhoto
PostsPhoto => belongs_to :post
Post => has_many :post_photos, dependent: :destroy,class_name: 'PostsPhoto'
我试过了
FactoryGirl.define do
factory :post do
article Faker::Lorem.paragraph(4)
video 'http://youtube.com'
author Faker::Name.name
category 'article'
title Faker::Name.title
post_photos
end
end
并且已经
NoMethodError: undefined method `each' for #<PostsPhoto:0x007ff68e3bd698>
我无法使用after(:create) {}
,因为我在创建
def check_slider_photo
errors.add(:post_photos, 'Add post photos') if self.post_photos.size <= 0
end
我想要create(:post)=> returns me post object with post_photos
答案 0 :(得分:0)
有几种方法可以解决这个问题。这取决于您正在测试的内容,但如果您不需要更改对象或在查询中使用它们,请尝试使用build_stubbed
而不是create
。
也就是说,如果您通常说FactoryGirl.create(:post)
,请尝试改为FactoryGirl.build_stubbed(:post)
。
另一种选择是不在测试中运行验证并单独测试验证。要做到这一点你可以说
post = FactoryGirl.build(:post)
post.save(validate: false)
然后创建其他对象并传递它们post.id
快乐测试。
答案 1 :(得分:0)
试试这个:
FactoryGirl.define do
factory :post do
article Faker::Lorem.paragraph(4)
video 'http://youtube.com'
author Faker::Name.name
category 'article'
title Faker::Name.title
factory :post_with_photos do
ignore do
photos_count 3
end
after(:build) do |post, evaluator|
post.post_photos << build_list(:post_photo, evaluator.photos_count)
end
end
end
end