2012-07-05 3 views
0

Je cette usineComment utiliser Factory girl pour créer une entreprise?

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 

Ce qui fonctionnait très bien jusqu'à ce que j'ai ajouté la validation de l'association

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

Comment puis-je ajouter à mon usine pour atteindre cet

J'ai essayé

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

Mais tous mes tests échouent avec

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

toute aide serait appréciée

Répondre

3

Avez-vous essayé simplement?

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

awesome thanks .. – Trace

1

Si vous voulez avoir une entreprise par utilisateur, vous devez utiliser belongs_to :company dans le modèle de l'utilisateur au lieu d'un has_many. Si vous voulez vraiment avoir de nombreuses entreprises par utilisateur, see this answer.

+0

Je sais que j'ai besoin, mais plus d'une entreprise .... mais ma validation assure que je atleast un – Trace

+0

En fait, votre validation doit déclencher une erreur, sauf si vous avez un attribut company_id. –

+0

pas réellement la 'validates_presence_of: company' est la nouvelle façon (rails 3.2) d'écrire validates_existence_of sur une association – Trace

0

Vous voulez une usine pour la société, l'utilisateur et la position, que remplacer les valeurs par défaut si nécessaire:

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 
Questions connexes