Jest 测试错误:browserType.launch:setImmediate 未定义。使用剧作家时

YTh*_*mas 8 javascript jestjs playwright

我在 Javascript 代码中使用 jest 进行测试时遇到错误。

\n

错误:

\n

失败 src/test/testPlaywright.test.jsx (5.779 秒)\n\xc3\x97 创建与剧作家交互的快照 (149 毫秒)

\n

\xe2\x97\x8f 创建与剧作家交互的快照

\n
browserType.launch: setImmediate is not defined\n\n  4 |     for(const browserType of [chromium, firefox, webkit]){\n  5 |         console.log("Testing");\n> 6 |         const browser = await browserType.launch({headless: false});\n    |                                           ^\n  7 |         const page = await browser.newPage();\n  8 |         await page.setDefaultNavigationTimeout(1000000);\n  9 |         await page.goto('https://app.wien.gv.at/navigation/', { waitUntil: 'networkidle' });\n\n  at Object.<anonymous> (src/test/testPlaywright.test.jsx:6:43)\n
Run Code Online (Sandbox Code Playgroud)\n

测试套件: 1 次失败,总共 1 次\n测试: 1 次失败,总共 1 次\n快照: 总共 0 个\n时间: 8.517 秒\n运行与更改的文件相关的所有测试套件。

\n

代码:

\n
import { chromium, webkit, firefox } from "playwright";\n\ntest('Creating a Snapshot of interacting with playwright',async()=>{\n    for(const browserType of [chromium, firefox, webkit]){\n        console.log("Testing");\n        const browser = await browserType.launch({headless: false});\n        const page = await browser.newPage();\n        await page.setDefaultNavigationTimeout(1000000); \n        await page.goto('https://app.wien.gv.at/navigation/', { waitUntil: 'networkidle' });\n\n        await page.click("(//mat-icon[text()='keyboard_arrow_down'])[1]")\n        await page.click("#mat-select-0")\n        await page.click('//span[@class="mat-option-text"][contains(.,"Veranstaltungszentrum")]')\n        await page.click("//mat-icon[text()='keyboard_arrow_up']")\n        \n        await page.click("(//mat-icon[text()='keyboard_arrow_down'])[2]")\n        await page.click("#mat-select-3")\n        await page.click('//span[@class="mat-option-text"][contains(.,"Kapelle Krankenhaus Hietzing")]')\n\n        await page.waitForTimeout(2000);\n\n        await page.screenshot({path:'image-'+browserType.name()+'.png'});\n        \n        await browser.close();\n    }\n})\n
Run Code Online (Sandbox Code Playgroud)\n

YTh*_*mas 11

问题是 setImmediate 函数。

我刚刚在我的测试类中添加了 polyfill.js : import 'core-js'; 之后 setImmediate 被再次定义并且现在按预期工作。

  • 谢谢这对我有用,我将“core-js”添加到“jest.config.js”中的“setupFiles”数组中 (3认同)

knu*_*ser 8

从 Jest 28 开始,您可以testEnvironment针对每个文件进行设置。例如,您的 mainjest.config.js可以有

testEnvironment: 'jsdom'
Run Code Online (Sandbox Code Playgroud)

但是在 Node 环境中运行的单个文件中,您可以将其放在顶部:

/**
 * @jest-environment node
 */
Run Code Online (Sandbox Code Playgroud)

这将允许setImmediate()其他特定于节点的事情工作。