RSpec Rails控制器测试因ActionController::UnknownFormat失败排查
问题原因与解决方案
这个报错属于测试代码的问题,和rails_helper无关,完全可以通过修正测试代码避免。
报错根源
控制器的show动作里,respond_to只配置了format.json的处理逻辑,但你当前的测试请求没有明确告知服务器客户端接受JSON格式。Rails默认会将未指定格式的请求识别为HTML格式,导致找不到对应的格式处理分支,从而抛出ActionController::UnknownFormat错误。
修正测试代码的两种方式
方式一:指定请求格式
在get请求中添加format: :json参数,明确请求JSON格式:
get "/api/v1/students/some-portfolio", format: :json
方式二:设置请求头
通过headers参数设置Accept为application/json,告诉服务器客户端接受JSON响应:
get "/api/v1/students/some-portfolio", headers: { "Accept" => "application/json" }
额外说明
如果你的测试是type: :controller类型(而非当前的type: :request),还可以用如下写法:
get :show, params: { slug: "some-portfolio" }, format: :json
但针对当前的请求类型测试,前面两种方式更适配。
内容的提问来源于stack exchange,提问作者user3724786
相关产品推荐
相关产品推荐

