使用Jest测试Playwright时出现browserType.launch: setImmediate is not defined错误
解决Jest中使用Playwright时出现
setImmediate is not defined的错误 这个错误的核心原因很明确:Jest默认使用jsdom作为测试环境,它模拟的是浏览器端的运行环境,而Playwright需要在完整的Node.js环境中运行——因为Playwright要启动真实的浏览器进程,依赖Node.js的核心API(比如setImmediate),这些API在jsdom环境里是不存在的。
下面是具体的解决步骤:
1. 为Playwright测试指定Node.js环境
你有两种方式来配置:
方式一:在测试文件顶部添加环境注释
直接在你的testPlaywright.test.jsx文件最顶部添加一行注释,强制让Jest用Node环境执行这个测试:
/** @jest-environment node */ import { chromium, webkit, firefox } from "playwright"; // 你的测试代码...
方式二:在Jest配置文件中全局配置
如果你有多个Playwright测试文件,可以在jest.config.js(或jest.config.ts)里通过overrides选项为特定测试文件指定环境:
module.exports = { // 默认的测试环境(比如你的其他React组件测试用jsdom) testEnvironment: "jsdom", // 针对Playwright测试单独设置Node环境 overrides: [ { testMatch: ["**/*Playwright.test.jsx"], // 匹配你的Playwright测试文件 testEnvironment: "node" } ] };
2. 修复测试代码中的小问题
另外注意:新版本的Playwright中,browserType.name是一个属性而不是方法,你原来的browserType.name()会报错,需要改成browserType.name:
// 替换这一行 await page.screenshot({path:`image-${browserType.name}.png`});
额外验证步骤
确保你的依赖和浏览器安装正确:
- 重新安装Playwright依赖:
npm install playwright --save-dev - 安装Playwright所需的浏览器:
npx playwright install
完成以上步骤后,重新运行你的Jest测试,setImmediate is not defined的错误应该就会消失了。
附:你遇到的错误详情
FAIL src/test/testPlaywright.test.jsx (5.779 s) × Creating a Snapshot of interacting with playwright (149 ms) ● Creating a Snapshot of interacting with playwright browserType.launch: setImmediate is not defined 4 | for(const browserType of [chromium, firefox, webkit]){ 5 | console.log("Testing"); > 6 | const browser = await browserType.launch({headless: false}); | ^ 7 | const page = await browser.newPage(); 8 | await page.setDefaultNavigationTimeout(1000000); 9 | await page.goto('https://app.wien.gv.at/navigation/', { waitUntil: 'networkidle' }); at Object.<anonymous> (src/test/testPlaywright.test.jsx:6:43) 测试套件:1个失败,共1个 测试用例:1个失败,共1个 快照:0个 耗时:8.517 s 已运行所有与变更文件相关的测试套件。
内容的提问来源于stack exchange,提问作者YThomas
相关产品推荐
相关产品推荐

