我正在将我的TypeScript项目切换到一个(pnpm)单胞项目,并且在获得测试以正确运行方面遇到了困难。我有一个jest.config.js,它也使用用TypeScript编写的自定义testEnvironment。但是,自从我将特定的项目移动到用于monorepo重组的包目录中之后,jest就会抛出一个错误,并且不会运行任何测试:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\workspaces\repos\the-monorepo\packages\testproject\source\testtools\jsdom-environment-global.spec.ts我尝试了@swc/jest以及ts-jest,看了一下How to use TypeScript in a Custom Test Environment file in Jest? (这让我想到“为什么这会起作用?”)不管是什么原因,昨天一切都很顺利。我清理了jest缓存,并重新安装了所有node_modules,但都没有效果。我还在package.json中找到了与package.json相关的答案,但这并不适用于我的包。这不是ESM。
下面是jest.config.js的样子:
/** @type {import('@jest/types').Config.InitialOptions} */
const config = {
silent: true,
testEnvironment: "<rootDir>/source/testtools/jsdom-environment-global.spec.ts",
roots: [
"<rootDir>/source"
],
maxWorkers: "50%",
transform: {
"^.+\\.(t|j)s$": ["@swc/jest", {
sourceMaps: "inline",
module: {
strict: false,
strictMode: false
},
jsc: {
target: "es2021",
parser: {
syntax: "typescript",
dynamicImport: true
}
}
}]
},
transformIgnorePatterns: [
"node_modules"
],
testMatch: [
"**/*/*.spec.ts",
"**/*/*.test.ts",
"!**/playwright-tests/**",
"!**/playwright-tests-smoke/**"
],
moduleFileExtensions: ["ts", "js", "node", "json"],
reporters: [
"default"
],
globals: {
self: {},
navigator: {},
jasmine: {},
__UNIT__: true
},
coverageDirectory: "test-results",
collectCoverage: false,
collectCoverageFrom: [
"./source/**/*.ts"
],
coveragePathIgnorePatterns: [
"/\\.spec\\.ts$/i",
"/.*node_modules.*/",
"/.*testtools.*/"
],
coverageReporters: [
"lcov", "cobertura"
],
coverageProvider: "v8",
resetMocks: true,
restoreMocks: true,
resetModules: true,
setupFilesAfterEnv: [
"jest-extended/all",
"<rootDir>/source/testtools/setup.spec.ts"
],
testPathIgnorePatterns: [
"<rootDir>/source/testtools/",
"<rootDir>/source/smoke-tests/",
"<rootDir>/source/performance-tests/",
"<rooDir>/source/playwright-tests/",
"<rooDir>/source/playwright-tests-smoke/"
],
moduleNameMapper: {
"^@test-helpers": "<rootDir>/source/testtools/index.spec.ts",
"^@test-tools/(.*)": "<rootDir>/source/testtools/$1",
'^(\\.{1,2}/.*)\\.js$': '$1'
}
};
module.exports = config;如果testEnvironment是TypeScript文件,为什么jest不能解析它?
发布于 2022-07-11 11:23:30
我发现了一个问题:似乎对转换器没有应用到ESM文件有一些混淆。在我的例子中,jsdom-environment-global.spec.ts从我的monorepo中的不同包中导入了一个ESM模块。此导入触发一个异常,因为jest试图通过require()导入它,然后通过动态导入再次导入。然后,此动态导入抛出ts是未知异常的异常。我不知道为什么这些文件没有被转换,但就How to use TypeScript in a Custom Test Environment file in Jest?而言,这似乎是正常的。
底线:不要从jest testEnvironment模块中的ESM文件中导入。
https://stackoverflow.com/questions/72909792
复制相似问题