在我们的rails 2.3应用程序中,我已按如下方式设置了rescue_from路由错误:
rescue_from ActionController::RoutingError, :with => :redirect_or_render_error
rescue_from ActionController::UnknownController, :with => :redirect_or_render_error
rescue_from ActionController::UnknownAction, :with => :redirect_or_render_error
然后在我的redirect_or_render_error
方法中,我重定向某些URL(从数据库中提取,所以我不能只使用routes.rb),我想测试一下。我是在我的索引页面的功能测试中做的(这是正确的地方吗?)如下:
@request.remote_addr = '12.34.56.78' # fake remote request
get '/example'
assert_redirected_to '/example_things/123456'
我得到了
ActionController::RoutingError: No route matches {:action=>"/example", :controller=>"home"}
即使它在开发中有效。如何测试rescue_from的路由故障?
答案 0 :(得分:0)
你断言你的路线是正确的。事实并非如此。您有一组计划不映射的路由,并且您将在异常处理程序中处理该路由。 (旁白:我认为你应该尝试在routes.rb中处理尽可能多的情况,并让普通的Ruby方法处理任何进一步的操作。)
无论如何,为了真正测试这个,你想要做的更多:
@request.remote_addr = '12.34.56.78' # fake remote request
assert_raise ActionController::RoutingError do
get '/example'
end
答案 1 :(得分:0)
原则上我必须使用集成测试而不是功能测试,如下所示:
get '/example', {}, :remote_addr => '12.34.56.78'
assert_redirected_to '/example_things/123456'
我还需要在config / environments / test.rb
中将config.action_controller.consider_all_requests_local
设置为false