Factory Girl:创建关联记录

8
我正在尝试使用Factory Girl做一些我认为应该非常简单的事情,但是还没有完全搞明白。一个用户拥有很多故事,我正在测试查看用户个人资料页面,其中列出了他们创建的故事。
我查阅了创建相关工厂的文档,文档上说我可以像这样做:
FactoryGirl.define do

  factory :story do
    title "My Story"
    segments_limit 5
    beginning "Once upon a time"
    completion_status false
    user
  end

  factory :user do
    sequence(:username) { |n| "user-#{n}" }
    sequence(:email) { |n| "user-#{n}@example.com" }
    password "password"
    password_confirmation "password"

    factory :user_with_stories do
      ignore do
        stories_count 5
      end

      after(:create) do |user, evaluator|
        create_list(:story, evaluator.stories_count, user: user)
      end
    end
  end
end

这似乎不起作用 - 当我进入控制台并运行FactoryGirl.create(:user_with_stories).stories.length时,我得到一个空数组。我有什么遗漏吗?
2个回答

10

你应该使用 after :buildbuild_list,并将列表分配给用户的关联,像这样:

after(:build) do |user, evaluator|
  user.stories << build_list(:story, evaluator.stories_count, user: user)
end

0

用户创建后添加故事,您需要在创建后实例化用户才能查看附加的故事:

user = FactoryGirl.create(:user_with_stories)
user = User.find user
user.stories.length

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接