當您可以在測試中簡單地使用ActiveRecord來創建數據庫條目時,工廠/固定裝置的目的是什麼(我知道工廠像固定裝置一樣行事,但有點更清晰)?即News.create(...)工廠/裝置vs簡單Model.create(...)?
我只是不想看到使用工廠女孩,而不是簡單地創建一個新放過任何好處說使用ActiveRecord方法的新用戶..
感謝
當您可以在測試中簡單地使用ActiveRecord來創建數據庫條目時,工廠/固定裝置的目的是什麼(我知道工廠像固定裝置一樣行事,但有點更清晰)?即News.create(...)工廠/裝置vs簡單Model.create(...)?
我只是不想看到使用工廠女孩,而不是簡單地創建一個新放過任何好處說使用ActiveRecord方法的新用戶..
感謝
有工廠並按照測試數據構建模式將讓你做的工作有點前面,但真的會節省您的時間和將來的工作。
比方說,你有一個汽車模型,並且該汽車擁有一個所有者,並且該所有者需要一個地址。其他每個領域都有其他領域。如果你想直接使用模型的方法,你將不得不在每一個需要它們的步驟定義中創建這些對象(和相應的關係)。有工廠?你會只定義一次。
一旦您將Factory定義在一個具有相應結構的地方,您所要做的就是要求一輛汽車,並且Factory將採用其他車型的所有依賴關係。這不是很酷嗎?最後你想重點測試在這一點上。
什麼它也真的很酷的是,你可以覆蓋特定屬性,所以你可能有例如這樣的事情,如果你要覆蓋屬性速度:
Given /^I have a car running^/
Factory :car, speed => 100
end
從我的謙虛點查看,我喜歡Factory Girl,因爲它使我的測試代碼易於維護,並且非常易於閱讀。
工廠允許你把測試設置放在一個文件中。例如,我的項目工廠在spec/support/factories/project_factory.rb
。
如果我想更改默認標題或添加其他屬性,我可以在一個文件中執行此操作。隨着AR在我的測試中到處散落,我需要在每次使用這個實例時改變它。
創建/構建了一個對象,然後你使用它,只有當在一個名爲test。
您可以在一個文件中定義對象的「快樂路徑」(包括關聯)(如ryan提及的),然後在模式/模型關聯發生變化時維護一個文件。
模仿什麼數據庫應該看起來像一個單獨的記錄,它的加載到測試數據庫,然後使用。
夾具是模型的最終狀態並且存在於數據庫中,所以加載一次,並且可以在您認爲合適的測試中使用。
多個文件,你佈置你的夾具文件,以便每個文件和協會都照顧。
創建一次,如果你有這些塊100在一個測試或一個before(:each)
塊
使用一次,即編寫和維護100個不同的對象,更別說像@user.profile.create(....)
100倍的關聯。在NewModel.create
一個文件工廠的
build
或create
。注 必須說,在我的測試套件,我希望它是快速成爲可能,所以我下探FactoryGirl和使用燈具和NewModel.create前進。只是爲了看看它是否加快速度。我正在研究FG正在放慢我的套件的理論,如let()
和before(:each)
對應點:所有這些參數也適用於燈具。燈具整體速度更快。任何其他原因? – DGM 2012-07-01 19:14:30
@DGM儘管我使用了我喜歡的裝置,但我有時會發現它們很難保持。 – 2012-07-27 18:32:08