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

使用Jest测试时调用Node.js Path模块join方法报错求助

解决Jest测试中path.join报错"TypeError: Cannot read properties of undefined (reading 'join')"

这个报错的核心原因是path变量为undefined,导致无法调用join方法,下面是几种常见的排查和解决方向:

1. 检查是否意外mock了path模块

如果你的测试文件中存在jest.mock('path')但未提供正确的mock实现,会直接把path模块置为undefined。

  • 若不需要mock path模块,直接删除该mock语句;
  • 若需要mock,需提供完整的mock实现,比如:
jest.mock('path', () => ({
  join: jest.fn((...args) => args.join('/'))
}));

2. 确认ES模块导入的正确性

如果你的项目使用ES模块(package.json中设置了"type": "module"),需确保Jest正确处理ES模块的导入:

  • 检查jest.config.js配置,添加ES模块支持:
export default {
  extensionsToTreatAsEsm: ['.js'],
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1'
  },
  transform: {}
};
  • 或者通过Babel转译ES模块:安装@babel/core、@babel/preset-env、babel-jest,然后创建.babelrc文件:
{
  "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]]
}

同时在jest.config.js中设置:

export default {
  transform: { '^.+\\.js$': 'babel-jest' }
};

3. 额外处理ES模块中的__dirname问题

虽然这不是当前报错的直接原因,但解决path的问题后,你可能会遇到__dirname is not defined的错误(因为ES模块中没有内置__dirname变量),可以通过以下方式手动获取:

import fs from "fs";
import path from "path";
import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

const createTempFile = (content) => {
  const tempFilePath = path.join(__dirname, 'temp.txt');
  console.log("tempFilePath", tempFilePath)
  fs.writeFileSync(tempFilePath, content);
  return tempFilePath;
}

内容的提问来源于stack exchange,提问作者arengit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:50:11