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

时间:2016-01-29 18:40:58

标签: ruby-on-rails testing factory-bot

如何使用factory_girl使用为子项声明的特征创建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

我一直在寻找上面的例子,但到目前为止我发现的所有内容只在父母中有特征并且只使用子工厂。当我尝试引用子特征时,我收到Factory not registered错误。

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

1 个答案:

答案 0 :(得分:0)

我认为问题是您没有在创建列表调用中指定工厂(: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