簡體   English   中英

測試Rails時管理模型關聯的復雜性

[英]Managing model association complexity when testing Rails

在最近的幾個項目中,我感到模型關聯會變得非常復雜。 由於這種復雜性,感覺測試比需要做的要困難得多。 例如,我需要為測試創建模型A的實例。 很多時候,它看起來像這樣(這是從我現在正在使用的應用程序中提取的):

  • 創建模型A,但是模型A依賴於B。
  • 模型B依賴模型C
  • 模型C依賴於D,E和F。具體地說,它需要附加6個F才能被認為是有效的。
  • 模型D,E和F可能有一個或兩個依賴項。

最后,創建A。 我在此應用程序上使用工廠,這會有所幫助,但是當我需要滿足如此多的驗證以便創建與此無關的簡單模型時,感覺還是太多了。

存根可能會有所幫助,但我覺得這一要求代表了核心建模方面的問題。

是否有任何旨在幫助解決此類依賴性的模式? 我一直在考慮的一件事是使大多數驗證基於上下文有條件。 控制器會將模型保存在該驗證上下文中,但允許我的測試套件創建對象,否則這些對象在實時應用程序或完全集成測試套件中將是“無效的”。 這樣做的問題是,為了進行測試,我覺得它會更改我的代碼庫,我認為通常這是一個壞主意。

像您一樣,我寧願應用程序中沒有特定於測試的代碼。 我也寧願一直在進行驗證,因為如果我不知道,誰知道什么測試可能會構造無效數據,從而在不應該通過時通過?

但是,如果測試運行速度快,那就更好了。 所以:

  • 我相信您已經使數據庫中的所有內容成為應有的種子,即,不需要比部署更多更改的模型實例。

  • 如果您使用的是factory_girl,而不僅僅是定義關聯並讓每次都有factory_girl都創建它們,則可以使工廠重用依賴項:

     factory :a do before :create do |a, _| ab ||= B.first || FactoryGirl.create(:b) end end 

    (尚未測試,但我相信意圖很明確。)

  • 如果您有時需要重用B,有時又需要重新創建B,那么顯然您有時必須編寫一些代碼。 最明智的做法可能是在測試中創建一個B並將其傳遞給應該重用的A,而不傳遞給不重復使用的B。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM