2011-08-15 10 views
0

私は次の工場を持っている:RSpecの

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 

今、私は次の操作を実行したとき:

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

(15行目:

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

私はエラーを取得しています@deal = Factory(:deal)を参照)

なぜ誰が知っていますか?私は工場の女の子にとっては非常に新しいので、関連性とシーケンスをよく説明したドキュメンテーションを見つけることができないようです。

答えて

1

ここでの問題は、明らかにあなたのproducerの関連付けの作成にリンクしています。

古いDSLを使っているので、私は2つのソリューションをお勧めしたい:after_buildまたはafter_create

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 

使用することは、あなたのテストの目的に応じて、実際に選択の問題です。

Here is a link to the new dsl lookup

+0

回答ありがとうございますが、変更にもかかわらず同じエラーが発生しています。なぜなのかご存知ですか? (私も主な質問を更新しました) – disappearedng

+0

mmmm、あなたは 'after_build'メソッドを試しましたか? – apneadiving

+0

はい私は同様にしました。工場のどこにでもプロデューサーにインスピレーションを与えたものは分かりますか? – disappearedng

関連する問題