Cypress中Invalid or unexpected token错误排查求助
Cypress 中"Invalid or unexpected token"未捕获错误排查方案
问题概述
在Public Release环境运行Cypress测试时,点击页面菜单跳转后触发未捕获错误:
以下错误来自您的应用代码,而非Cypress。
Invalid or unexpected token
当Cypress检测到应用抛出未捕获错误时,会自动使当前测试失败。
此行为可配置,您可通过监听uncaught:exception事件禁用该功能。
已尝试在support/index.js中添加全局忽略未捕获异常的代码,但问题仍存在:
Cypress.on('uncaught:exception', (err, runnable) => { return false })
同时已调整cy.visit()路径、cy.intercept()规则及相关链接,Staging环境测试正常,仅Public Release环境出现该问题。
排查与解决步骤
1. 验证全局异常拦截是否生效
给拦截代码添加日志,确认Cypress是否真的捕获到了该异常:
Cypress.on('uncaught:exception', (err, runnable) => { console.log('捕获到未捕获异常:', err.message) return false })
如果控制台未输出对应日志,说明异常未被Cypress监听捕获——可能是异常发生在监听注册之前,或是跨域脚本抛出的异常(Cypress默认不捕获跨域脚本的未处理异常)。
2. 定位异常的具体代码位置
- 测试运行时点击Cypress右上角的
Open DevTools,在浏览器开发者工具的Sources面板中,勾选Pause on uncaught exceptions选项; - 触发菜单跳转操作,待断点触发后,查看抛出异常的具体文件、代码行,确认是应用自身代码还是第三方脚本导致的问题。
3. 排查环境差异导致的资源问题
- 对比Staging与Public Release环境的页面资源:检查跳转后加载的JS、CSS文件是否存在压缩/混淆错误,或是引入了未转译的ES6+语法(Public环境构建规则可能更严格);
- 验证静态资源路径是否正确:比如Public环境的baseURL配置错误,导致加载了损坏的资源文件;
- 检查
cy.intercept()规则:确认是否遗漏了Public环境特有的请求(如第三方统计脚本、新的接口),未做正确Mock或拦截,导致加载了错误的脚本内容。
4. 针对特定场景添加局部异常拦截
如果全局拦截不生效,可在测试用例中针对跳转操作添加局部拦截,精准忽略该异常:
it('跳转目标页面测试', () => { cy.on('uncaught:exception', (err) => { if (err.message.includes('Invalid or unexpected token')) { return false } }) cy.get('.menu-selector').click() })
5. 检查Public环境的构建配置
- 确认Public Release环境的构建工具(Webpack/Vite等)是否开启了过度压缩规则,导致代码出现语法错误;
- 核对环境变量:检查Public环境是否使用了未定义的变量,或配置了与Staging不同的参数,导致运行时抛出异常。
内容的提问来源于stack exchange,提问作者alex97cristian1551
相关产品推荐
相关产品推荐

