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

Cypress路由别名匹配失败:POST请求/ocr/receipt未被匹配

为什么Cypress的cy.route匹配不到我的POST /ocr/receipt请求?

我之前也碰到过一模一样的问题,结合你的描述和代码,大概率是这几个常见原因之一,咱们一步步来排查解决:

1. 先确认路由定义的时机是否正确

cy.route必须在请求发起之前就完成定义,否则Cypress根本没机会拦截到请求。比如如果你的beforeEach里是先访问页面、再定义路由,那页面加载时发起的请求就会漏掉。

检查你的代码顺序,确保路由定义在所有可能触发请求的操作之前:

beforeEach(function () {
  // 先定义路由
  cy.route('POST','**/ocr/**').as('ocr');
  // 再访问页面或做其他初始化操作
  cy.visit('/your-page-url'); 
});

2. 试试精准匹配路径,排查通配符问题

有时候通配符**的匹配可能因为baseUrl、URL前缀等因素出现意外。先把路由改成精准匹配实际请求路径测试:

// 直接写实际的请求路径
cy.route('POST','/ocr/receipt').as('ocr');

如果这样能匹配到,说明之前的通配符模式可能没覆盖到实际的URL(比如请求带了额外的前缀,比如/api/ocr/receipt,那你需要调整为**/api/ocr/**)。

3. 替换成cy.intercept试试(推荐方案)

cy.route是Cypress旧版本的命令,在Cypress 6.0+已经被废弃,换成cy.intercept会有更好的兼容性,尤其是处理multipart/form-data这类上传请求(OCR收据大概率是上传图片,属于这类请求)。

修改后的代码:

beforeEach(function () {
  cy.intercept('POST', '**/ocr/**').as('ocr');
});

it('Création frais depuis le bouton « appareil photo »', function () {
  cy.get('.in-progress').first().click();
  // 等待路由匹配
  cy.wait('@ocr', { timeout: 10000 }); // 可以手动设置更长超时
});

cy.intercept的匹配逻辑更清晰,也能更好地处理复杂请求类型。

4. 检查请求方法和其他拦截器

  • 确认网络面板里的请求方法是POST,别不小心写成了PUT/PATCH之类的;
  • 看看有没有其他cy.route或cy.intercept先匹配了这个请求——如果有多个拦截器,Cypress会按定义顺序匹配第一个符合条件的,导致你的@ocr别名没被触发。

5. 查看Cypress命令日志确认匹配情况

打开Cypress的命令日志,找有没有XHR POST的条目,旁边是否标注了@ocr别名:

  • 如果没有这个条目:说明路由完全没匹配到,回到前面的步骤排查路径和时机;
  • 如果有这个条目但cy.wait还在等待:可能是请求还没完成?但你说网络面板显示请求已完成,那可能是Cypress的旧bug,换成cy.intercept基本能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:19:01