2013-01-04 63 views
1

在「編輯」控制器方法上,如果未找到作爲參數傳遞的項目,並且使用:not_found狀態代碼,我想將用戶重定向到控制器索引操作。下面是代碼:測試狀態代碼assert_redirected_to

redirect_to dashboard_posts_url, :status => :not_found 

的問題是,我無法使用assert_redirected_to軌道斷言測試這種行爲,因爲它需要的狀態代碼爲:重定向,如在源代碼:http://www.rubydoc.info/docs/rails/ActionDispatch/Assertions/ResponseAssertions:assert_redirected_to :(

你有任何解決方案,而無需重寫斷言?

+1

「未找到」(404)是不重新定向的一個狀態碼。 (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection)也只能發送301,302,201,202的「位置」標頭。(http://en.wikipedia.org/wiki/HTTP_location )你想在這裏完成什麼? –

+0

我想重定向用戶,同時通知重定向的原因(找不到項目)。最後我認爲這不是http頭的正確使用方式,所以我將繼續使用:重定向狀態碼。 –

+0

或者,您可以使用閃光消息來通知用戶。或者您可以創建一個自定義錯誤頁面,通知用戶有關問題並提供其他鏈接或在幾秒鐘後自動重定向他。 –

回答

1

您可以測試響應頭型,

assert_response :not_found 

然後,改變響應類型:重定向所以assert_redirected_to不會失敗,

response.status = :redirect 

,最後,測試重定向路徑

assert_redirected_to(...) 
+0

但我也想檢查url重定向。 –

+0

你不能只使用兩個斷言?我錯過了什麼嗎? –

+0

不,因爲assert_redirected_to總是會失敗 –