mig*_*aus 5 node.js mutation-observers reactjs jestjs
我正在尝试测试内部组件库的新版本,该库最近升级了一些依赖项,现在在内部使用Jest 26。该库还导出一些测试助手。
\n在使用上述组件库的另一个代码库中,我在运行某些单元测试时得到以下信息:
\nTypeError: MutationObserver is not a constructor\n\n at /<path_to_repo>/node_modules/@testing-library/dom/dist/wait-for.js:78:18\nRun Code Online (Sandbox Code Playgroud)\n这可能与组件库导出的测试助手依赖于 Jest 26 这一事实有关,也可能无关。(很难判断这些助手是否正在被使用——我们有一些非常大的“单元”) “测试。)
\n相关软件包版本(在使用代码库中):
\n运行yarn list jsdom结果如下:
\xe2\x94\x9c\xe2\x94\x80 jest-environment-jsdom-fourteen@1.0.1\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 jsdom@14.1.0\n\xe2\x94\x9c\xe2\x94\x80 jest-environment-jsdom@24.9.0\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 jsdom@11.12.0\n\xe2\x94\x94\xe2\x94\x80 jsdom@16.4.0\nRun Code Online (Sandbox Code Playgroud)\n我知道升级react-scripts和 Jest 可能会解决这个问题,但我正在尝试找到一种不涉及此问题的方法。(理想情况下,我们不希望这是升级到新组件库版本的先决条件。)
jsdom首先我尝试添加
\n"resolutions": {\n "jsdom": "^14.0.0"\n},\nRun Code Online (Sandbox Code Playgroud)\n给我的package.json。这确实只产生yarn list jsdom输出jsdom@14.1.0,但我仍然得到相同的结果TypeError。解决^15.0.0导致相同的错误,并解决给^16.0.0我以下错误:
TypeError: this.dom.runVMScript is not a function\n\n at JSDOMEnvironment.runScript (node_modules/jest-environment-jsdom/build/index.js:187:23)\nRun Code Online (Sandbox Code Playgroud)\njest-environment-jsdom-*我尝试通过安装来遵循此线程jest-environment-jsom-sixteen。更改我的test脚本package.json并运行yarn test --showConfig会产生大量信息,包括以下行:
"testEnvironment": "/<path_to_repo>/node_modules/jest-environment-jsdom-sixteen/lib/index.js",\nRun Code Online (Sandbox Code Playgroud)\n如果我console.log(navigator.userAgent)在测试中添加一个,我也会得到
Mozilla/5.0 (darwin) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/16.4.0\nRun Code Online (Sandbox Code Playgroud)\n但是,我仍然得到同样的结果TypeError: MutationObserver is not a constructor。
我也尝试jest-environment-jsdom-fourteen过jest-environment-jsdom-fifteen,尝试过,也强迫jsdom过^14.0.0。相同的结果。
mutationobserver-shim我运行并在我的(这是我的 Jest 配置中指向的)中yarn add -D mutationobserver-shim导入它(使用),但这导致了以下错误:import \'mutationobserver-shim\'jestSetup.tsglobalSetup
ReferenceError: window is not defined\n at Object.<anonymous> (/<path_to_repo>/node_modules/mutationobserver-shim/dist/mutationobserver.min.js:12:1)\nRun Code Online (Sandbox Code Playgroud)\n将导入添加到我的测试文件中产生TypeError与上面相同的结果,并将 a 添加console.log(global.MutationObserver)到我的测试文件中产生undefined.
经过大量的试验和错误,我发现如果我 1) 已经jest-environment-jsdom-sixteen安装并告诉 Jest 使用它,2) 添加import \'mutationobserver-shim\' 到我的测试文件中,测试就会通过。但是,如果我将导入添加到我的 JestglobalSetup文件中,它就不起作用。我得到ReferenceError: window is not defined和以前一样的错误。
如何在不要求组件库的用户向其所有测试文件添加导入语句的情况下消除这两个错误?
\n| 归档时间: |
|
| 查看次数: |
6187 次 |
| 最近记录: |