Jest Puppeteer测试报错:ReferenceError: cov_77g31rban未定义
问题原因与解决方案
这个错误里的cov_77g31rban是代码覆盖率工具(比如Istanbul、nyc)注入的覆盖率统计变量,问题出在这个项目开启了代码覆盖率收集,导致你的Puppeteer回调函数被自动注入了覆盖率代码,但这些变量只能在Node.js环境里识别,浏览器环境找不到,所以报错。其他项目没开覆盖率,所以正常运行。
解决办法:
- 检查项目是否启用了nyc、babel-plugin-istanbul这类覆盖率工具,确认是否在当前运行流程中自动注入了覆盖率代码。
- 临时禁用覆盖率收集:如果是用
nyc命令启动的,去掉命令前的nyc前缀;如果是配置文件(比如.nycrc、package.json里的nyc配置)里开启的,暂时注释相关配置项。 - 修改代码规避注入:把回调函数改成字符串形式传入,或者换用
page.evaluate直接写操作逻辑,覆盖率工具不会给静态字符串注入代码,比如:// 方案1:用page.evaluate直接操作 await page.evaluate(() => { const elem = document.querySelector("input[id*='virtual_course']"); if (elem) elem.click(); }); // 方案2:把回调函数写成字符串传入$eval await page.$eval("input[id*='virtual_course']", "elem => elem.click()"); - 配置覆盖率工具排除相关代码:在nyc或Istanbul的配置里,添加排除规则,不对Puppeteer的回调函数注入覆盖率代码,比如在
.nycrc里添加:"exclude": [ "**/*.test.js", // 根据你的测试文件路径调整 "**/puppeteer-scripts/**" // 把Puppeteer相关脚本加入排除 ]
内容的提问来源于stack exchange,提问作者Coderdude
相关产品推荐
相关产品推荐

