Cypress调用本地stub服务器PATCH接口报404,Postman调用同接口正常
问题原因排查及解决方案
核心原因(90%概率)
你遇到的404错误大概率是URL拼接错误导致的,你的代码中手动拼接baseUrl和路径的写法存在斜杠缺失的隐患:
- 如果你Cypress配置的
baseUrl是http://localhost:8882(末尾没有斜杠),拼接出来的最终请求地址会变成http://localhost:8882test/api,和Postman使用的http://localhost:8882/test/api不一致,自然会触发404。
排查步骤
- 先确认最终请求地址是否正确,在你的自定义命令中加入日志打印拼接结果:
const options = { method: 'PATCH', url: `${Cypress.env().baseUrl}test/api`, retryOnStatusCodeFailure: true, log: true, body: { id, }, } // 新增日志,运行时在Cypress界面查看打印的地址是否和Postman调用的完全一致 cy.log('请求地址', options.url)
如果确认是拼接缺少斜杠,直接选用以下任意一种方案修复即可:
- 方案1:修改Cypress的baseUrl配置,末尾补充斜杠,示例:
baseUrl: "http://localhost:8882/" - 方案2:不需要手动拼接baseUrl,直接给url字段加前缀斜杠,Cypress会自动和配置的baseUrl拼接:
const options = { method: 'PATCH', url: `/test/api`, // 开头加斜杠即可 // 其余配置保持不变 }
- 方案3:直接写完整请求地址,绕过拼接逻辑:
const options = { method: 'PATCH', url: `http://localhost:8882/test/api`, // 其余配置保持不变 }
其他小概率排查方向
如果确认地址完全一致还是返回404:
- 检查stubby的路由配置,是否对PATCH请求额外限制了请求头、query参数等匹配规则
- 检查Cypress是否配置了全局代理,把8882端口的请求代理到了其他服务
- 打开stubby的访问日志,对比Cypress发起的请求和Postman发起的请求的路径、请求头差异
内容的提问来源于stack exchange,提问作者Sanath
相关产品推荐
相关产品推荐

