我试图为src文件夹设置一个路径Map,由于某种原因,在我的jest测试文件中,它没有被解析。
- 这是我的项目结构:
app-esm/
├── __test__/
│ └── index.test.ts
├── src/
│ └── index.ts
├── jest.config.ts
├── package.json
└── tsconfig.json
- 这里是我的配置:
tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"outDir": "dist",
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"baseUrl": ".",
"paths": {
"@App/*": ["src/*"]
}
},
"exclude": ["node_modules", "./*.ts", "__test__"]
}
jest.config.ts
import type { JestConfigWithTsJest } from "ts-jest";
const config: JestConfigWithTsJest = {
verbose: true,
transform: {
"^.+\\.ts?$": [
"ts-jest",
{
useESM: true,
},
],
},
extensionsToTreatAsEsm: [".ts"],
moduleNameMapper: {
"@App/(.*)": "<rootDir>/src/$1",
},
};
export default config;
索引文件
export const run = () => "hello, there!";
测试文件
import { run } from "@App/index";
test("index", () => {
expect(run()).toBe("hello, there!");
});
这里缺少什么配置?
你可以检查这个repo来重现这个问题。
没有路径Map的 p.s 导入工作得很好。我只需要删除tsconfig中的路径配置,将moduleNameMapper@App替换为"^(\\.{1,2}/.*)\\.js$": "$1".
即可
2条答案
按热度按时间idfiyjo81#
您可以通过以下步骤修复您的问题。
1.将您的
jest.config.ts
更新为如下所示:这里有两个解决办法。一个用于
moduleNameMapper
,另一个用于preset
以使用ESM。我们还将为jest使用新的
tsconfig.test.json
,这将在下一步中解释。1.我创建了一个新的
tsconfig.test.json
(因为在现有的tsconfig.json
中,我看到您已经排除了__test__
。在运行
npm run test
时,您会得到以下输出:gupuwyp22#
几个小时后,我可以让它工作。我做的是:
tsconfig.json
tsconfig.build.json
如果有人看到用ts和jest实现esm模块路径的另一种方法,请在这里评论。:)
你也可以检查repo。