使用Jest时从桶文件(Barrel File)导入模块失效的问题求助
使用Jest时从桶文件(Barrel File)导入模块失效的问题求助
我在测试时遇到了一个长期困扰的问题:当测试从桶文件(barrel file,也就是index.ts)导入内容的代码时,总是会报错,错误信息到处都一样:
import { funcName } from "../../";
TypeError: (0 , common_1.funcName) is not a function
如果直接从源文件导入而不是通过index.ts,测试就能正常运行,但我总不能为了让测试工作就修改所有文件的导入路径吧?我觉得肯定有更好的解决办法,但一直没找到(先暂且不提桶文件本身的争议)。
我在StackOverflow上查过不少相关问题,大家都建议单独mock各个函数,但这对我来说不是个好方案——我总不能用空函数来测试组件吧?
我试过调整Jest的各种配置,目前的配置是这样的:
{ testEnvironment: "jsdom", preset: "ts-jest/presets/default-esm", injectGlobals: true, moduleNameMapper: { "^@/(.*)$": "<rootDir>/src/$1", "(.*)/index$": ["$1/index.ts", "$1/index.js"], "\\.(css|less|scss|sass)$": "identity-obj-proxy", "^lodash-es$": "lodash", "^lodash-es/(.*)$": "lodash/$1" }, roots: ["<rootDir>/src"], modulePaths: ["<rootDir>/src"], moduleDirectories: ["node_modules", "src"], "transform": { "\\.[jt]s?$": ["ts-jest", { useESM: true, isolatedModules: true, diagnostics: false }] }, transformIgnorePatterns: [ "/node_modules/(?!@testing-library).+\\.js$" ], extensionsToTreatAsEsm: [".ts", ".tsx"], setupFilesAfterEnv: ["./jest.setup.ts"], globals: { extensionsToTreatAsEsm: [".ts", ".js"], }, moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], };
有没有人遇到过同样的问题?或者有什么可行的解决方案?我已经花了好几天时间试图修复,但一直没成功,实在不知道该怎么办了。
备注:内容来源于stack exchange,提问作者fetixzz
相关产品推荐
相关产品推荐

