Rails项目中RSpec请求测试失败,寻求问题排查帮助
RSpec请求测试失败:未获取到2xx状态码的解决方法
你的测试代码存在两个关键问题,直接导致了失败:
1. 没有实际发送HTTP请求
在RSpec的请求测试中,必须先调用对应的HTTP方法(比如get '/')模拟发送请求,否则response对象是空的,根本不会生成状态码。
2. 错误地直接断言response对象包含文本
response是一个Response实例,要检查页面内容,必须通过response.body获取响应的HTML文本后再做断言。
修正后的users_spec.rb代码:
require 'rails_helper' RSpec.describe 'Get /', type: :request do it 'test / get method' do get '/' # 新增:发送GET请求到根路径 expect(response).to have_http_status(:success) expect(response.body).to include('index') # 修改为检查响应体内容 end end
失败原因说明
- 未添加
get '/'时,response未被初始化,没有状态码,因此报错提示"expected the response to have a success status code (2xx) but it was " - 原代码中
expect(response).to include('index')会直接失败,因为你是在断言一个对象是否包含字符串,而非检查页面实际输出的内容。
运行修正后的测试,即可正常通过。
内容的提问来源于stack exchange,提问作者zzxczxczaa
相关产品推荐
相关产品推荐

