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

RSpec请求测试解析response.body报JSON::ParserError如何解决

问题根源

接口返回的是HTML格式响应,而非你预期的JSON格式,所以JSON.parse解析非JSON内容直接抛出解析错误。

解决方案

方案1:测试时显式指定请求JSON格式

修改请求测试代码,在发送请求时明确要求返回JSON:

# 方法1:通过format参数指定
get '/posts', params: { format: :json }

# 方法2:通过Accept头指定
get '/posts', headers: { 'Accept' => 'application/json' }

两种写法选一种即可,修改后你的测试请求就会拿到JSON响应。

方案2:路由默认指定JSON格式(适合纯API项目)

如果你的项目是纯API服务,所有接口都只返回JSON,可以直接在路由配置中限定默认格式,无需每次测试加参数:

# config/routes.rb
Rails.application.routes.draw do
  resources :posts, defaults: { format: :json }
  # 其他路由同理配置
end
额外注意点

你当前的测试断言写法也有问题:json_response返回的是解析后的数组/哈希结构,直接用include('Some title')无法匹配到嵌套的标题值,需要根据你接口实际返回的结构调整断言,比如接口返回posts数组,每个元素包含title字段,断言应该写成:

expect(json_response.first['title']).to eq('Some title')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:54:03