【发布时间】: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