2016-07-25 65 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

你的例子不使用'transient'。你有沒有使用你想了解的'transient'的工廠? –

回答

20

transient屬性允許您在模型上傳遞不是屬性的數據。

假設你有一個叫car模型具有以下屬性:

  • purchase_price
  • 模型

你要在創建大寫的車名汽車模型在工廠。我們可以做的是:

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" 

希望它有幫助。