测试 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