2012-07-17 115 views
0

我在rspec测试中看到了很多这种模式,我尝试了几次来清理它,没有运气。我有一个工厂,当然是blog,工厂post。博客has_many帖子。创建一个包含许多关联对象的对象

我一般用FactoryGirl为了这个目的,工厂应该是这样的:

FactoryGirl.define :blog do |b| 
    b.title "my blog" 
end 

FactoryGirl.define :post do |p| 
    p.author "some dude" 
    p.content 
end 

这是我的RSpec的测试代码味道:

@blog = FactoryGirl.create(:blog) 
5.times { FactoryGirl.create(:post, :blog => @blog) } 

好像我应该能够定义一个完全水化的博客文章的新工厂:

FactoryGirl.define :blog_with_posts, :parent => :blog do |bwp| 
    5.times { bwp.association(:post) } 
end 

我一直无法找到一种实际工作的方法。

回答

1
FactoryGirl.define do 
    factory :post do 
    author "dude" 
    content { Faker::Lorem.paragraph } 
    blog 
    end 

    factory :blog do 
    title "title" 
    factory :blog_with_posts do 

     ignore do 
     posts_count 5 
     end 

     after(:create) do |blog, evaluator| 
     FactoryGirl.create_list(:post, evaluator.posts_count, blog: blog) 
     end 

    end 
    end 
end 
相关问题