我正在尝试编写一个测试,以确认我的应用程序发送404 Not Found
来响应对无效记录的请求(比如一个id=0
记录)。
我的测试代码看起来像这样:
get '/pluralized_name_for_my_resource/0', as: :json
assert_response :not_found, "Doesn't return 404 Not Found for invalid id"
如果我将相应的URL插入浏览器,例如http://localhost:3000/pluralized_name_for_my_resource/0.json
,则应用程序在内部引发activerecord异常(并向日志打印有关它的消息),但正确地响应为404 Not Found
。
但是,当我运行测试时,异常的处理方式却不同。测试中止并在第一个get '/pluralized_...
行返回,并报告为错误而不是通过测试。
我怎样才能使我的测试环境以与我的开发环境相同的方式处理异常,以便我的测试通过?
1条答案
按热度按时间sqxo8psd1#
我做了一些实验,给出了
rails g scaffold foo
和这个测试:在默认设置下,ActiveRecord::RecordNotFound异常确实不会被异常处理程序捕获,并冒泡到测试中。
在
config/environments/test.rb
中改变config.consider_all_requests_local
和config.action_dispatch.show_exceptions
似乎是可行的:有了这两个变化,测试通过:
然而,这样做可能不是最好的主意,因为应用程序中的异常通常会导致您的测试提前退出。一个简单的解决方法是使用
assert_raise
来捕获异常,当它冒泡到测试时: