升级Cypress版本后Headers authorization失效无法登录如何解决
Cypress 6.x升级到8.3.1后setAuth自定义命令失效解决方案
核心原因
Cypress 7.0及以上版本对cy.intercept()的请求处理逻辑做了破坏性调整:6.x版本中修改请求参数后会隐式将修改后的请求继续发送,而7.0+版本要求修改请求后必须显式调用req.continue(),修改的请求头才会实际生效。
修复后的自定义命令代码
Cypress.Commands.add("setAuth", () => { // 8.x版本对URL匹配规则更严格,使用通配符适配不同环境域名 cy.intercept('**/privat*', (req) => { req.headers['authorization'] = 'Bearer token' // 新增该行,显式提交修改后的请求 req.continue() }) })
可选调试步骤
- 打开Cypress测试运行器的「网络」面板,找到对应
/privat接口的请求条目,查看请求头中是否实际携带了authorization字段,确认是头未注入还是后端鉴权逻辑其他问题 - 在
intercept回调中添加打印逻辑:console.log('拦截到请求', req.headers),打开Cypress内置的开发者工具,查看回调是否被触发、头修改逻辑是否执行 - 检查是否存在其他优先级更高的
intercept规则匹配了该请求,导致当前setAuth的拦截逻辑被覆盖
更稳定的登录态注入方案
如果你的应用登录态是存储在LocalStorage/ Cookie中,更推荐直接注入存储值,无需拦截所有请求:
// 注入LocalStorage存储的token Cypress.Commands.add("setAuth", () => { cy.window().then(win => { win.localStorage.setItem('access_token', '你的实际token') }) // 如果是Cookie存储的登录态,用下面的方法 // cy.setCookie('auth_token', '你的实际token', { domain: '你的应用域名' }) })
内容的提问来源于stack exchange,提问作者Inder
相关产品推荐
相关产品推荐

