0

我有这个工厂

FactoryGirl.define do
  factory :user do
    email               { Faker::Internet.email }
    first_name          { Faker::Name.first_name }
    last_name           { Faker::Name.last_name }
    password            { 'TarXlrOPfaokNOzls2U8' }
  end
end

在我添加关联验证之前效果很好

class User < ActiveRecord::Base
  has_many :companies, :through => :positions
  has_many :positions
  validates_presence_of :company

我如何添加到我的工厂以实现这一目标

我试过这个

 association :company, factory: :company, strategy: :build

但是我所有的测试都失败了

 undefined method `company=' for #<User:0x007fcd7c13c260>

任何帮助,将不胜感激

4

3 回答 3

3

你试过简单吗?

FactoryGirl.define do
  factory :user do
    email               { Faker::Internet.email }
    first_name          { Faker::Name.first_name }
    last_name           { Faker::Name.last_name }
    password            { 'TarXlrOPfaokNOzls2U8' }
    companies           { [Factory(:company, strategy: build)] }
  end
end
于 2012-07-05T14:02:25.237 回答
1

如果您希望每个用户拥有 1 个公司,那么您需要belongs_to :company在 User 模型中使用而不是 has_many。如果您真的希望每个用户拥有许多公司,请参阅此答案

于 2012-07-05T13:57:36.200 回答
0

您需要一个公司、用户和职位的工厂,而不是根据需要覆盖默认值:

  factory :position do
    user
    company
  end
  factory :company do
    #company stuff
  end

  user = create(:user)
  company = create(:company)
  postion = create(:position, user: user, company: company)
  user.company.should eq company
于 2012-07-05T13:59:49.887 回答