You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails中用Swagger测试PDF返回接口遇ActionController::UnknownFormat错误

解决ActionController::UnknownFormat错误及PDF接口测试正确方式

错误原因

ActionController::UnknownFormat 本质是控制器的respond_to块找不到请求匹配的格式。你的控制器只处理format.pdf,但测试请求没有正确传递Accept: application/pdf头,导致Rails无法识别要返回的格式。

修复步骤

1. 给测试请求手动添加Accept头

修改你的rswag测试代码,在before块中明确设置请求头:

before do |example|
  sign_in @some_user
  request.headers['Accept'] = 'application/pdf' # 关键:指定接受PDF格式
  submit_request(example.metadata)
end

虽然你在测试里写了produces 'application/pdf',但rswag的submit_request可能没有自动将其注入请求头,手动添加可以确保请求格式被正确识别。

2. 确认PDF格式的MIME类型注册

检查config/initializers/mime_types.rb文件,确保已经注册PDF的MIME类型(Rails 7通常默认包含,但如果是自定义配置可能缺失):

Mime::Type.register "application/pdf", :pdf

注册后Rails才能正确将application/pdf映射到:pdf格式,让respond_to能匹配到。

3. 完善测试断言(验证PDF响应细节)

除了状态码,还应该验证响应的内容类型和文件属性,确保返回的是正确的PDF附件:

it 'returns a valid PDF attachment' do |example|
  submit_request(example.metadata)
  assert_response :ok
  # 验证内容类型
  assert_equal 'application/pdf', response.content_type
  # 验证文件名和处置方式
  assert_match /attachment; filename="something.pdf"/, response.headers['Content-Disposition']
end

额外注意事项

  • 确保你使用的PDF生成gem(比如wicked_pdf)已经正确配置,ApplicationController.render pdf: ...能正常生成PDF二进制内容。
  • 如果测试时还是有问题,可以直接打印request.headers确认Accept头是否被正确设置,排查请求格式是否传递到控制器。

内容的提问来源于stack exchange,提问作者Hessah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:22:49