2011-01-23 2 views
2

나는이 다음 모델 :factory_girl의 오이 단계 및 옵션 협회

class Person < ActiveRecord::Base 
    belongs_to :family 
end 

class Family < ActiveRecord::Base 
end 

그리고 다음과 같은 공장이 같은

Factory.define :person do |p| 
    p.association :family 
end 

Factory.define :family do |f| 
end 

내가 factory_girl의 오이 단계를 사용하고 있습니다 :

Given the following people exist: 
    | First name | Last name | 
    | John  | Doe  | 

Given the following people exist: 
    | First name | Last name | Family    | 
    | John  | Doe  | Name: Doe's family | 

첫 번째 양식을 사용하여 관련 가족이없는 사람들을 만들고 싶습니다. 사람들을 만들려면 후자입니다. 가족과 함께. 이제 모든 사람은 가족이 있습니다. 사실 클래스에 validates_presence_of :name이 있기 때문에 첫 번째 양식 사용이 실패합니다.

Person 팩토리 정의에서 p.association :family을 제거하면 연결된 레코드로 문자열을 설정하려고하기 때문에 후자 양식이 실패합니다 (family = "Name: ..."과 같이 실행 됨).

factory_girl로 정의 된 오이 단계에서 선택적 연결을 사용할 수 있습니까?

처럼 다른 공장을 만들 것

답변

3

:

Factory.define :orphan, :class => "Person" do |factory| 
    # does not belong to a family 
end 

그런 다음 첫 번째 설치에 그것을 사용

Given the following orphans exist: 
    | First name | Last name | 
    | John  | Doe  | 
1

내가 기본 인 산세 연결을 만들 것입니다 후 아이 공장을 정의 이는 연관성을 추가합니다. 이는 직관적이지는 않지만 클래스 계층 구조를 구축하는 적절한 방법입니다.

Factory.define(:person) do |f| 

end 

Factory.define(:family_member, :parent => :person) do |f| 
    f.association(:family) 
end