测试 Rails 404 和 500 JSON 响应
Testing Rails 404 and 500 JSON reponse
我正在用 Rails 构建一个 JSON 后端 API,但我似乎无法弄清楚:How can one test using RSpec the Rails 默认错误响应?例如,对于一个通用的 404 请求,我目前有以下请求规范:
require 'rails_helper'
RSpec.describe '404 errors' do
let(:json) { JSON.parse(response.body) }
before { get '/noexistent', headers: headers }
# examples
end
然而,Rails 拒绝呈现它通常会产生的 404 响应,而只是简单地提高:
ActionController::RoutingError:
No route matches [GET] "/404"
我试过从 config/environments/test.rb
中删除 config.consider_all_request_local = true
,但没有结果。
请注意,我已经看到 this question(这是我想到 consider_all_requests_local
的地方),但它适用于开发,而不是测试。
编辑: 我正在使用 config.exceptions_app = self.routes
将错误重定向到 ErrorsController
。这在开发或生产中运行良好,但在测试时却不行。测试的时候,还是报上面的错误。有什么想法吗?
原来答案很简单。我不得不在 config/environments/test.rb
:
中更改这一行
# Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false
至:
# Do not raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = true
我正在用 Rails 构建一个 JSON 后端 API,但我似乎无法弄清楚:How can one test using RSpec the Rails 默认错误响应?例如,对于一个通用的 404 请求,我目前有以下请求规范:
require 'rails_helper'
RSpec.describe '404 errors' do
let(:json) { JSON.parse(response.body) }
before { get '/noexistent', headers: headers }
# examples
end
然而,Rails 拒绝呈现它通常会产生的 404 响应,而只是简单地提高:
ActionController::RoutingError:
No route matches [GET] "/404"
我试过从 config/environments/test.rb
中删除 config.consider_all_request_local = true
,但没有结果。
请注意,我已经看到 this question(这是我想到 consider_all_requests_local
的地方),但它适用于开发,而不是测试。
编辑: 我正在使用 config.exceptions_app = self.routes
将错误重定向到 ErrorsController
。这在开发或生产中运行良好,但在测试时却不行。测试的时候,还是报上面的错误。有什么想法吗?
原来答案很简单。我不得不在 config/environments/test.rb
:
# Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false
至:
# Do not raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = true