首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当尝试使用ts文件作为自定义ERR_UNKNOWN_FILE_EXTENSION时,jest会抛出一个testEnvironment?

为什么当尝试使用ts文件作为自定义ERR_UNKNOWN_FILE_EXTENSION时,jest会抛出一个testEnvironment?
EN

Stack Overflow用户
提问于 2022-07-08 10:04:33
回答 1查看 158关注 0票数 2

我正在将我的TypeScript项目切换到一个(pnpm)单胞项目,并且在获得测试以正确运行方面遇到了困难。我有一个jest.config.js,它也使用用TypeScript编写的自定义testEnvironment。但是,自从我将特定的项目移动到用于monorepo重组的包目录中之后,jest就会抛出一个错误,并且不会运行任何测试:

代码语言:javascript
复制
    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的样子:

代码语言:javascript
复制
/** @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不能解析它?

EN

回答 1

Stack Overflow用户

发布于 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文件中导入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72909792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档