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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:45:33