我如何使用Factory girl创建公司?

时间:2012-07-05 13:54:11

标签: ruby-on-rails ruby ruby-on-rails-3 rspec factory-bot

我有这个工厂

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>

任何帮助将不胜感激

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您希望每个用户拥有1家公司,则需要在用户模型中使用belongs_to :company而不是has_many。如果您真的希望每个用户拥有多家公司,see this answer

答案 2 :(得分: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