2011-08-15 3 views
0

j'ai les usines suivantes:rspec avec une fille usine

Factory.define :producer, :class => User do |f| 
    f.sequence(:email) { |n| "producer_#{n}@shit.com" } 
    f.password "foobar" 
    f.password_confirmation "foobar" 
    f.role  "producer" 
end 

Factory.define :business do |f| 
    f.sequence(:name) { |n| "business_#{n}" } 
    f.association(:producer, :factory => :producer) 
end 

Factory.define :deal do |d| 
    d.sequence(:title) { |n| "deal_#{n}" } 
    d.sequence(:desc) { |n| "deal_desc_#{n}" } 
    d.cap "50" 
    d.rate "2" 
    d.start Date.today - 1  # This is the date where you put in db 
    d.end Date.today + 7 
    d.association :business 
end 

maintenant, quand je fais ce qui suit:

before(:each) do 
    @consumer = test_sign_in(Factory(:consumer)) 
    @deal = Factory(:deal) 
    end 

Je reçois une erreur:

Failure/Error: @deal = Factory(:deal) 
NoMethodError: 
    undefined method `producer=' for #<Business:0x007fb494290090> 
# ./deals_controller_spec.rb:15:in `block (4 levels) in <top (required)> 

(ligne 15 se réfère à @deal = Factory(:deal))

Est-ce que quelqu'un sait pourquoi? Je suis très nouveau à l'usine fille et je n'arrive pas à trouver la documentation expliquant l'association et la séquence très bien.

Répondre

1

Le problème ici est évidemment lié à la création de votre association producer.

Puisque vous utilisez l'ancien dsl, je vous suggère deux solutions:

Factory.define :business do |f| 
    f.sequence(:name) { |n| "business_#{n}" } 
    #try this: 
    f.association(:user, :factory => :producer) 
    #or this: 
    f.after_build { |biz| biz.user = Factory.build(:producer) } 
end 

L'utilisation de after_build ou after_create est vraiment une question de choix, en fonction de vos tests.

Here is a link to the new dsl lookup.

+0

Merci pour la réponse, mais je reçois toujours la même erreur malgré le changement. est-ce que tu sais pourquoi? (J'ai également mis à jour la question principale) – disappearedng

+0

mmmm, et avez-vous essayé la méthode 'after_build'? – apneadiving

+0

oui je l'ai fait aussi bien. Savez-vous ce qui a inspiré le producteur = n'importe où dans l'usine? – disappearedng

Questions connexes