我从 Jest 27 迁移到 28。如果我现在尝试开始测试,我只会收到此错误:
● Test suite failed to run
TypeError: Cannot read properties of undefined (reading 'extend')
at createJestExpect (node_modules/@jest/expect/build/index.js:35:19)
at Object.<anonymous> (node_modules/@jest/expect/build/index.js:47:20)
at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:317:13)
at runJest (node_modules/@jest/core/build/runJest.js:407:19)
at _run10000 (node_modules/@jest/core/build/cli/index.js:338:7)
at runCLI (node_modules/@jest/core/build/cli/index.js:190:3)
Test Suites: 1 failed, 1 total
我什至无法调试我的测试,因为内部测试设置已经失败。任何线索,出了什么问题吗?
这是当 moduleDirectories
选项包含
"."
时出现的错误(请参阅此处)。
要解决此问题,请将
"."
更改为 "<rootDir>"
:
moduleDirectories: ["node_modules", "<rootDir>"]
或者,如果您使用
jest.config.js
文件,则可以将 "."
更改为 __dirname
:
module.exports = {
moduleDirectories: ["node_modules", __dirname]
};
我在使用 Angular 和 jest 时遇到了类似的错误。将 jest 和 Angular 依赖项更新到最新版本后,我以与 @Lupina 略有不同的方式修复了此错误,但使用
<rootDir>
而不是 __dirname
。这是我当前的 jest.config.js
jest.config.js
module.exports = {
preset: 'jest-preset-angular',
setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
globalSetup: 'jest-preset-angular/global-setup',
moduleDirectories: ['node_modules', '<rootDir>'],
transformIgnorePatterns: ['node_modules/(?!@angular|rxjs)'],
collectCoverage: true,
coverageDirectory: '<rootDir>/coverage/',
};
如果它对某人有帮助,我从不同的 Lerna 包循环导入文件导致了这个问题,那么删除它就可以解决我的问题。