玩笑更新后无法读取未定义的属性“html”

Jea*_*eri 26 jestjs angular

对于使用 jest 的 Angular v12 项目,我刚刚将 jest 更新到版本 28。但是现在,我收到以下错误

\n
FAIL  src/app/components/update-input/update-input.directive.spec.ts\n\xe2\x97\x8f Test suite failed to run\n\n  TypeError: Cannot read property 'html' of undefined\n\n    at new JSDOMEnvironment (node_modules/jest-environment-jsdom/build/index.js:72:44)\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 tsconfig.spec.json

\n
{\n  "extends": "./tsconfig.json",\n  "compilerOptions": {\n    "outDir": "./out-tsc/spec",\n    "types": [\n      "jest", \n      "node",\n      "Chrome"\n    ],\n    "esModuleInterop": true,\n    "emitDecoratorMetadata": true,\n    "allowSyntheticDefaultImports": true,\n    "moduleResolution": "Node",\n    "module": "es2020",\n    "files": ["src/test.ts", "src/polyfills.ts"],\n    "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]\n  },\n}\n
Run Code Online (Sandbox Code Playgroud)\n

和 jest.config.js

\n
const { pathsToModuleNameMapper } = require("ts-jest/utils");\nconst { compilerOptions } = require("./tsconfig");\n\nmodule.exports = {\n  preset: "jest-preset-angular",\n  // preset: 'jest-preset-angular/presets/defaults-esm',\n  roots: ["<rootDir>/src/"],\n  testMatch: ["**/+(*.)+(spec).+(ts)"],\n  setupFilesAfterEnv: ["<rootDir>/src/test.ts"],\n  collectCoverage: true,\n  coverageReporters: ["html"],\n  coverageDirectory: "coverage/app",\n  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths || {}, {\n    prefix: "<rootDir>/",\n  }),\n  transform: {\n    '^.+\\\\.(ts|js|html|svg)$': 'ts-jest',\n  },\n  moduleFileExtensions: ['ts', 'js', 'html', 'svg'],\n  // extensionsToTreatAsEsm: ['.ts'],\n  // globals: {\n  //   'ts-jest': {\n  //     tsconfig: '<rootDir>/tsconfig.spec.json',\n  //     stringifyContentPathRegex: '\\\\.html$',\n  //     useESM: true,\n  //   },\n  // }\n};\n
Run Code Online (Sandbox Code Playgroud)\n

当我向我的项目添加一个 web-worker 时,我的测试出现了问题,该项目使用import.meta.url

\n
 this.worker = new Worker(new URL('../webworkers/search.worker', import.meta.url), { type: 'module' });\n
Run Code Online (Sandbox Code Playgroud)\n

有什么建议以及如何解决这个问题吗?

\n

Jea*_*eau 13

我遇到了同样的错误,并在这里找到了解决方案:在此处输入链接描述

yarn add --dev jest-environment-jsdom
Run Code Online (Sandbox Code Playgroud)


小智 10

我遇到了同样的问题,并注意到 jest-environment-jsdom 版本为 27。我安装了 v28 以匹配 jest 版本,并且它不再出现此错误。

我的测试仍然失败,所以 YMMV!