2011-06-09 67 views
3

我真的很喜歡用Factory Girl來設置我的測試。我可以在一行中建立聯繫鏈。例如:如何更快地測試並仍然使用Factory Girl?

Factory.create(:manuscript) 

自動創建一個日記,日記主人,稿件作者等它讓我保持我的設置塊很簡單,這是夢幻般的。

但是,當然有一個成本。在後臺創建多個對象意味着我的單元測試有時只要0.8秒。當你的應用程序很小時,這很好,但現在我有幾百個測試,而且我的規格需要一分鐘才能運行(不包括應用程序啓動所需的時間)。它開始感到痛苦。

我對任何過於激烈的事情都不感興趣,比如嘲笑一切。至少在我的應用程序相對較小的時候,我想保留我的工廠女孩​​抽象。我只想找出一種方法讓它們工作得更快一點。

有什麼建議嗎?

回答

1

不知道這個問題有很好的解決方案。正如Beerlington所建議的那樣,您可以使用Factory.build而不是Factory.create節省一些時間。但即便如此,測試一個普通的老紅寶石物體的速度也沒有那麼快。事實上,看起來,如果你非常關心速度,那麼工廠女孩不是一個好選擇。

也就是說,通過閱讀我的整個套件並自由使用rspec-set寶石,我能夠做出相當顯着的速度提升。這允許您爲整個測試組運行一次​​ - 只有一次。這與使用before(:all)類似,只不過它利用事務來重置每個規範之間的對象狀態。

3

如果您正在測試對象行爲並且不需要實際將它們保存到數據庫中,則可以使用Factory.build(:model)。它基本上實例化對象和它的關聯,但不寫入數據庫。這將比創建和存儲所有這些對象快得多。如果您仍然想要將一些或大部分對象寫入數據庫,則可以設置SQlite內存測試數據庫。 Here's an example

+0

嗯。我知道構建選項。但是,根據我的經驗,它可能會導致測試期望通過ID鏈接的問題。我會做一些修改(以及更有前途的聲音「存根」方法)。如果我拿出任何有價值的東西,我一定會發布。 – 2011-06-11 18:10:14

相關問題