2010-10-06 19 views
0

當我運行其中一個應用程序的功能測試時,有一天我在我的代碼中遇到了一個導致RoutingError的錯誤。我的功能測試是加載一個頁面,並在該頁面創建一個鏈接到一個沒有有效路線的頁面。這個異常的具體原因並不是問題的關鍵 - 問題是這個異常沒有傳回給我的測試。我知道發生異常的唯一原因是因爲我碰巧注意到它在test.log文件中。總之,測試通過,但我認爲這應該算作失敗!Rails功能測試不捕捉/獲取異常

這使我困惑。我嘗試將我的測試代碼放在assert_nothing_raised塊中,但它仍然通過。

挖掘進一步我意識到任何由我的應用程序拋出的異常正在默默記錄,並沒有導致測試失敗。 Rails中的這種故意行爲還是聽起來像我有錯誤的東西?

編輯: 我認爲問題可能是Rails捕獲並處理異常(以便它可以在瀏覽器發送請求時呈現熟悉的堆棧跟蹤頁面)。我可以看到爲什麼這在development環境中很有用,但肯定不在test環境中......?

回答

0

你應該明確地檢查你的功能測試中每個動作的響應,嘗試做這樣的事情,而不是:

得到:指數 assert_response:成功

你應該始終有某種形式的斷言響應。當動作應該重定向你使用assert_redicted_to

+0

這幫助我追蹤到傑里米。問題似乎是功能測試和集成測試處理異常的方式之間的區別。 (我曾經通過一些問題歪曲了問題 - 這實際上是一種失敗的集成測試。)如果您在_integration_測試中調用'get'/ boom'',您不會有任何異常,只需要一個'500'響應。然而,在_functional_測試中,'get'本身會引發異常。奇。 – Ben 2010-10-07 15:36:00

+0

啊,很高興我能幫上忙。我實際上並不知道集成測試的相關知識 – Jeremy 2010-10-08 02:35:35