2013-01-04 64 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总是会失败 –