【问题标题】:How to test that JSON-only controller returns 406如何测试仅 JSON 控制器返回 406
【发布时间】:2016-08-15 13:23:41
【问题描述】:

我有一个控制器,它应该只接受 application/json 或 /。我在控制器类中检查了这一点:

...
include ActionController::MimeResponds

before_action :require_json

def require_json
  respond_to :json
end
....

虽然每次客户端使用无效的接受标头时日志中都会出现 UnknownFormat 错误,但效果很好。控制器正确返回 HTTP 406 Not Acceptable。

在我写的测试中:

...
test 'do not accept plain text' do
  assert_raises ActionController::UnknownFormat do
    get '/api/v1/ping', headers: {'Accept' => 'text/plain'}
  end
  assert_response :not_acceptable
...

然后 Rake 在accept_response 处出现未定义的方法错误,因为响应为零。我假设它没有在未知格式异常处设置正常执行流程中止。但是,如果我不断言异常,测试就会中止它。

在每个 406 处抛出一个异常是个好主意吗?如何测试是否返回了 406?

【问题讨论】:

  • 这只是我的意见,但在这种情况下我不会提出例外。我一定会将它传播回 JSON 接口的客户端,并允许他们根据他们的设计和业务逻辑对其做出反应。

标签: ruby-on-rails json


【解决方案1】:

【讨论】:

  • 这会产生相同的错误。我认为代码不是问题,但是在 assert_raises 中执行 get 时响应对象为零。但如果我没有捕捉到异常,测试将中止。
  • 你可能是对的。如果您的回答是 nil,那么您正在做一些不正常的事情。对不起,我帮不上忙,但我会再次检查一下
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 2018-01-10
  • 2016-03-07
  • 2023-04-09
相关资源
最近更新 更多