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
相关产品推荐
相关产品推荐

