2011-08-15 4 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을 사용하고 있기 때문에

, 나는 두 가지 솔루션을 제안하십시오 :

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 

after_build 또는 after_create의 사용은 테스트 목적에 따라, 정말 선택의 문제이다.

Here is a link to the new dsl lookup.

+0

답변 주셔서 감사합니다.하지만 변경 사항에도 불구하고 여전히 동일한 오류가 발생합니다. 왜 그런지 알아? (나는 주요 질문도 업데이트했다.) – disappearedng

+0

mmmm 그리고'after_build' 메소드를 시도 했습니까? – apneadiving

+0

그래, 나도 그랬어. 공장의 어느 곳에서 생산자에게 영감을 주었습니까? – disappearedng

관련 문제