2012-07-05 65 views
0

我有这个工厂我如何使用Factory Girl创建公司?

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

您是否尝试过简单?

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 
+0

上写入validates_existence_of的新方法(rails 3.2)awesome thanks .. – Trace 2012-07-05 14:17:40

1

如果你想有每个用户1家公司,那么你需要在用户模型中使用belongs_to :company代替的has_many的。如果你真的想要每个用户有很多公司,see this answer

+0

我知道,但我需要一个以上的公司....但我的验证可以确保我有一个ATLEAST其实 – Trace 2012-07-05 14:41:25

+0

,除非你有一个COMPANY_ID属性,您的验证应该引发错误。 – 2012-07-05 14:52:44

+0

实际上,'validates_presence_of:company'是在关联 – Trace 2012-07-05 15:14:36

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 
相关问题