我有一个关于 cy.intercept 的问题,我似乎无法弄清楚如何解决,在我们的项目中我们曾经使用路由,但现在尝试开始使用拦截。所以,我们的套路过去是这样定义的:
'upload: {route: `api/cases/import-data/**`, alias:'upload'}
因此,我们使用 minimatch 的 **
来处理 import-data/
之后的任何内容,而这目前不适用于拦截。
所以我现在尝试使用 RegExp,所以我的问题很简单,我应该用什么替换 RegExp 中的 **
?似乎没有任何效果,而且我收到了超时错误。
我的功能:
function listener({ route, method = 'POST', onRes = () => { }, alias = 'listener' }) {
const url = new RegExp(`${Cypress.config().beUrl}${route}`);
cy.intercept(
method,
url,
(req) => {
req.reply(res => {
onRes(res);
});
}
).as(alias);
}
答案 0 :(得分:1)
使用正则表达式,您不需要任何东西来替换 minimatch '**'。 "api/cases/import-data/**"
可以翻译成 /api\/cases\/import-data/
。
但请注意转义的正斜杠,我认为这是
中缺少的成分const url = new RegExp(`${Cypress.config().beUrl}${route}`)
用于构建正则表达式的字符串不包含路径分隔符的反斜杠转义符。
这可能有用
const escapedBaseUrl = Cypress.config().beUrl.replace('/', '\/');
const escapedRoute = route.replace('/', '\/');
const url = new RegExp(`${escapedBaseUrl}${escapedRoute}`);
但迟早你会遇到其他需要转义的字符,所以你可以使用像regex-escape这样的包,
const RegexEscape = require("regex-escape");
...
const url = new RegExp(RegexEscape(`${Cypress.config().beUrl}${route}`));