當我可以使用before(:each)
塊時,rspec測試中Factory Girl的用途是什麼?感覺Factory Girl和before(:each)
唯一的區別在於工廠在測試之外準備對象創建。這是正確的嗎?工廠女孩 - 目的是什麼?
回答
像Factory Girl和Sham這樣的寶石允許您爲有效和可重用對象創建模板。它們是根據固定記錄必須加載到數據庫中的固定裝置而創建的。當你實例化對象時,它們允許更多的自定義,並且它們旨在確保你有一個有效的對象來處理。它們可以在測試中的任何地方以及測試鉤之前和之後使用。 (:each),before(:all),after(:each)和after(:all)之前的所有目標都是爲了給你一個設置和拆卸地點,以便在一個測試組中共享。例如,如果您要爲每個測試創建一個新的有效用戶,那麼您需要在before(:each)鉤子中執行此操作。如果你打算從文件系統中清除一些文件,你希望在hook之前這樣做。如果你的測試都創建了一個tmp文件,並且你想在測試之後將其刪除,那麼你會在你的after(:each)或之後(:all)鉤子中執行該操作。
這兩個概念的不同之處在於,工廠不是圍繞您的測試創建鉤子,而是旨在創建有效的Ruby對象和記錄,以便您可以保持對象的創建靈活和乾爽。鉤子之前和之後的目標是在示例組中共享的設置和拆卸任務,以便您可以保持設置和拆卸代碼乾燥。
另一種說法是:FactoryGirl工廠就像'give_me_a_valid_model'函數。如果你需要在多個''之前:每個'塊',它會爲你節省一些重複。設置有效模型(關聯,確保唯一值等)越複雜,它可以爲您節省更多的精力。 –
FactoryGirl替換測試中的燈具。這樣,當您更改數據模型時,您不必將燈具保持在最新狀態。在添加更多邊緣情況下,燈具也可能變得笨重。
FactoryGirl隨時生成數據,添加和刪除字段要容易得多。此外,您可以在設置中使用它,以確定如何使用燈具。
這是否使它更清晰?
花了我一段時間才弄清楚,工廠是一個「智能」替代裝置。我仍然有興趣瞭解更多關於模擬和存根之間的區別。 – Docunext
它確實如此,謝謝。 :)很高興知道他們是一個很好的替代裝置。這有點奇怪,因爲Hartl的教程(這很好,順便說一句)進出夾具和工廠女孩之間。我發現自己很困惑。現在我知道了,我可能會更頻繁地使用它。 :) – curiousdork
夾具定義在整個應用程序中都是全局的。工廠可以是本地的 - 所以特定於獨立測試用例的數據是針對該特定上下文的設置,而不是在單個全局固件文件中。
This book涵蓋的主題非常好,如果你想要更多的讀物
- 1. 工廠女孩 -
- 2. 與工廠女孩
- 3. 工廠女孩 - 有
- 4. 與工廠女孩
- 5. Rails 4.0的工廠女孩
- 6. 工廠女孩嵌套工廠
- 7. 工廠女孩回憶工廠
- 8. Rails工廠女孩協會
- 9. 工廠女孩與製造
- 10. 工廠女孩belongs_to的:CLASS_NAME
- 11. MiniTest的工廠女孩
- 12. 工廠女孩的屬性
- 13. 工廠女孩協會4.0.0
- 14. 工廠的女孩多的has_many是
- 15. 工廠女孩錯誤
- 16. 工廠女孩,從屬工廠
- 17. 工廠女孩參考父
- 18. 工廠女孩共同根目錄圖
- 19. 工廠女孩和HAS_ONE
- 20. 如何在工廠女孩
- 21. 工廠女孩協會
- 22. Rspec工廠女孩問題
- 23. Rails 3.1,工廠女孩bug
- 24. 工廠女孩協會不工作
- 25. 工廠女孩:想要防止一些性狀的工廠女孩回調
- 26. 工廠女孩has_many當孩子需要
- 27. Rspec +工廠女孩(沒有導軌!)
- 28. 空?不工作在工廠女孩
- 29. Rspec的,工廠的女孩,after_initialize
- 30. 使用工廠女孩,Rspec2和Rails 3.1.0
這是怎麼FactoryGirl與ActiveReccord https://cbabhusal.wordpress.com/2015/04/21/ruby-on-rails-factory互動-girl-how-it-interact-with-activerecord/ – illusionist