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

我一直无法找到真正有效的方法。

4

1 回答 1

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
于 2012-07-18T02:38:24.157 回答