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 创建与剧作家交互的快照
\nbrowserType.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)\nRun Code Online (Sandbox Code Playgroud)\n测试套件: 1 次失败,总共 1 次\n测试: 1 次失败,总共 1 次\n快照: 总共 0 个\n时间: 8.517 秒\n运行与更改的文件相关的所有测试套件。
\n代码:
\nimport { 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})\nRun Code Online (Sandbox Code Playgroud)\n
YTh*_*mas 11
问题是 setImmediate 函数。
我刚刚在我的测试类中添加了 polyfill.js : import 'core-js'; 之后 setImmediate 被再次定义并且现在按预期工作。
从 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()其他特定于节点的事情工作。