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

解决RSPEC中POST请求测试的URI::InvalidURIError错误

问题分析与修复方案

你遇到的URI错误是因为RSpec请求测试中post方法的用法不正确,和Postman的请求逻辑不一样——Rails的测试助手方法已经帮你处理了HTTP方法的声明,不需要在路径里额外加POST前缀。

错误根源

你原来的测试代码里犯了两个关键错误:

  1. 路径格式错误:post方法的第一个参数只需要路由路径(比如'/url_contents'),不需要加上POST标识。RSpec的post方法本身就代表发起POST请求,加了POST之后会被当成路径的一部分,导致和测试环境的base URL拼接成无效的URI(比如错误信息里的http://www.example.com:80POST /url_contents...)。
  2. 参数传递错误:params需要是哈希结构,而不是直接传字符串。你的控制器通过url_params获取参数,对应应该传递{ url: 'www.google.com' }这样的键值对。

修正后的测试代码

把测试代码改成下面这样就能解决问题:

describe 'POST /url_contents' do
  context 'when the url is valid' do
    before { post '/url_contents', params: { url: 'www.google.com' } }
    
    it 'returns a status code of 201' do
      expect(response).to have_http_status(201)
    end
  end
end

额外的控制器细节优化

顺便提两个控制器里的小问题,避免后续踩坑:

  • save?应该改成save:save?仅返回布尔值但不会触发回调,save才是真正执行数据库保存操作并返回结果的方法。
  • 拼写错误:messsage多了一个s,应该修正为message。

这样修改后,你的RSpec测试就能正常发起请求,不会再出现URI无效的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:58