You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:28:04