2016-07-25 2 views
7

FactoryGirl 팩토리에서 transient do의 목적은 무엇입니까?FactoryGirl 공장에서 'transient do'블록의 목적은 무엇입니까?

다음과 같이 시작하는 많은 공장을 보아 왔습니다.

factory :car do 
    owner nil 
    other_attribute nil 
end 
... 

나는이 블로그에 대한 몇 가지 정보를 발견했습니다 http://blog.thefrontiergroup.com.au/2014/12/using-factorygirl-easily-create-complex-data-sets-rails/

하지만 난 여전히 완벽하게이 작업을 수행하는 방법과 이유를 이해하지 않습니다. FactoryGirl에 대한 나의 경험은 미미합니다.

FactoryGirl을 사용해 본 경험이있는 사람이라면 누구나 통찰력을 공유 할 수 있습니까?

+2

귀하의 예는 '일시적'을 사용하지 않습니다. 당신은 당신이 이해하고 싶어하는 '일시적'을 사용하는 공장을 가지고 있습니까? –

답변

20

transient 속성을 사용하면 이 모델의이 아닌 데이터를 전달할 수 있습니다.

  • 이름
  • PURCHASE_PRICE
  • 모델

당신은 당신이를 만들 때 차의 이름을 활용하려는 :

는 다음과 같은 속성을 가진라는 모델 car을 말해봐 공장에서 자동차 모델입니다. 우리가 할 수있는 것은 : 따라서

factory :car do 
    transient do 
    # capitalize is not an attribute of the car 
    capitalize false 
    end 

    name   { "Jacky" } 
    purchase_price { 1000 } 
    model   { "Honda" } 

    after(:create) do |car, evaluator| 
    car.name.upcase! if evaluator.capitalize 
    end 
end 

, 당신은 자동차 공장을 만들고 이름을 투자 할 때마다. 할 수 있습니다

car = FactoryGirl.create(:car, capitalize: true) 
car.name 
# => "JACKY" 

희망이 있습니다.