Factory_girl 如何使用为 child 声明的特征创建 HABTM 关联?

Factory_girl how to create HABTM association using traits declared for child?

如何使用 factory_girl 使用为 child 声明的特征创建 HABTM 关系?

这基本上就是我想要做的:

factory :site do
  name 'some domain name'

  trait :rejected do
    rejected true
  end

  trait :processing do
    processing true
  end
end

factory :user do
  trait :bob do
    name 'Bob'

    after(:create) do |user, evaluator|
      create_list(:rejected, 1, users: [user])
      create_list(:processing, 1, users: [user])
    end
  end
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :sites
end

我一直在寻找像上面这样的例子,但到目前为止我发现的所有东西都只有 parent 中的特征并且只使用 child 工厂。当我尝试引用 child 特征时,出现 Factory not registered 错误。

此外,该列表不会更改。我不需要它是动态的。我知道我想为每个用户提供哪些网站。

我认为问题在于您没有在创建列表调用中指定您的工厂 (:site)

尝试:

after(:create) do |user, evaluator|
  create_list(:site, :rejected, 1, users: [user])
  create_list(:site, :processing, 1, users: [user])
end

或者只是:

after(:create) do |user, evaluator|
  user.sites << build(:site, :rejected)
  user.sites << build(:site, :processing)
end