Pau*_* S. 1 unit-testing typescript jestjs ts-jest
我正在向使用 的 TypeScript 项目添加单元测试compilerOptions.paths,并且我需要模拟导入。
我遇到了一个问题,jest 无法解析要模拟的模块
\n FAIL logic/index.test.ts\n \xe2\x97\x8f Test suite failed to run\n\n Cannot find module \'@lib/foo\' from \'logic/index.test.ts\'\nRun Code Online (Sandbox Code Playgroud)\n我正在使用ts-jest它添加对导入中路径的支持,但看起来我需要为模拟执行额外的步骤
解决这里路径的正确方法是什么?
\n简化案例
\n{\n "baseUrl": ".",\n "compilerOptions": {\n "paths": {\n "@lib/*": ["lib/*"]\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n文件系统
\n* lib\n * __mocks__\n * foo.ts\n * foo.ts\n* logic\n * index.ts\n * index.test.ts\n* tsconfig.json\n* jest.config.js\nRun Code Online (Sandbox Code Playgroud)\n// index.ts\nimport foo from \'@lib/foo\';\n\nconst logic = () => foo();\n\nexport default logic;\nRun Code Online (Sandbox Code Playgroud)\n// index.test.ts\nimport \'jest\';\n\nimport logic from \'.\';\n\njest.mock(\'@lib/foo\');\nRun Code Online (Sandbox Code Playgroud)\n* lib\n * __mocks__\n * foo.ts\n * foo.ts\n* logic\n * index.ts\n * index.test.ts\n* tsconfig.json\n* jest.config.js\nRun Code Online (Sandbox Code Playgroud)\n
根据文档ts-jest,当您使用时,您compilerOptions.paths需要相应地更新 Jest moduleNameMapper。该库提供了一个实用程序来为您构建适当的映射:
// jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest/utils');
const { compilerOptions } = require('path/to/tsconfig');
module.exports = {
moduleNameMapper: pathsToModuleNameMapper(
compilerOptions.paths,
{ prefix: '<rootDir>/' },
),
preset: 'ts-jest',
testEnvironment: 'node',
};
Run Code Online (Sandbox Code Playgroud)
或者,根据您的情况,您可以手动执行此操作:
// jest.config.js
module.exports = {
moduleNameMapper: { '^@lib/(.*)$': '<rootDir>/lib/$1' },
preset: 'ts-jest',
testEnvironment: 'node',
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |