Cypress Intercept如何精准匹配forms后仅为数字的URL避免硬编码
Cypress 拦截 forms/纯数字格式请求的最优方案
Cypress 的 cy.intercept() 原生支持正则表达式作为路径匹配规则,比通配符规则的边界控制更精准,可以完美满足你的需求,实现代码如下:
// 你已有的动态变量 $code 不需要修改 const formPathRegex = new RegExp(`^/api/v1/contacts/cfs:${$code}/forms/\\d+(\\?.*)?$`) // 发起拦截,这里可以根据你的请求方法换成POST/PUT等 cy.intercept('GET', formPathRegex).as('targetFormRequest')
规则说明
^匹配路径开头,避免其他前缀的同格式路径被误拦截\\d+匹配/forms/后1个及以上的纯数字,天然排除/forms/非数字类请求(\\?.*)?是可选匹配项,兼容带query参数的请求(如/forms/123?status=1),如果你的接口没有查询参数可以删除这部分$匹配路径结尾,避免数字后还有/其他路径的请求被命中,直接排除/forms/数字/其他路径类场景
匹配测试验证
你可以用以下场景验证规则准确性:
- ✅ 命中:
/api/v1/contacts/cfs:12345/forms/144543、/api/v1/contacts/cfs:67890/forms/9876、/api/v1/contacts/cfs:12345/forms/234?status=1 - ❌ 不命中:
/api/v1/contacts/cfs:12345/forms/something、/api/v1/contacts/cfs:12345/forms/123/submit、/other/path/forms/123
如果不想用正则,也可以用Cypress支持的minimatch Glob规则写法,不过边界控制弱于正则,仅适合完全无query参数的场景:
const urlResponse = `/api/v1/contacts/cfs:${$code}/forms/+([0-9])`
内容的提问来源于stack exchange,提问作者Ignis Abbot
相关产品推荐
相关产品推荐

