2011-06-14 103 views
6

對於控制器測試,Rails建議檢查HTTP響應,身份驗證,分配,會話和Flash消息等內容。然而,在我正在使用的應用程序中,我看到很多Rspec測試都使用了response.body.should have_tag(),據我所知,它理想地適用於視圖測試。使用rspec最佳實踐的Rails視圖/控制器測試

我想知道的是:

是否有相當大的性能/其他實物,處罰相關檢測的這種不理想的方式是什麼?

回答

10

如果您在控制器中渲染視圖,這將使您的控制器測試需要更多時間。這一切都取決於你是否認爲值得測試視圖元素的存在(這往往會使你的測試更脆弱)。如果這樣做,那麼在控制器規格中進行操作會更輕鬆,因爲您不必編寫單獨的視圖規格文件。

如果您想在視圖上測試很多事情,那麼您可能需要編寫單獨的視圖規範。分離視圖規格可能會讓測試套件的總體運行時間增加。但是,出於調試的目的,可以清楚地看到一個視圖與一個控制器分離的東西是否有問題。

我懷疑大多數Rails程序員不寫視圖規範。相反,他們可能依靠他們的整合測試(Capybara +/-黃瓜)來測試他們的觀點。但是集成測試需要比單元測試更多的時間。 RSpec書爲編寫單獨的視圖規範提供以下參數:

查看規格爲我們提供了一個機會,可以從控制器和模型中發現我們需要的API。當API遵循最標準的慣例時,這並不重要。然而,隨着我們對他們的偏離,價值會增加。...

真正感受他們的好處的唯一方法是查看測試結果。只有當你真正瞭解它們在流程中的適應性時,你才能夠就是否使用它們以及何時使用它們做出有根據的決定。