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

使用Jest测试capitalize函数时触发TypeError:该函数不是函数

解决Jest测试中TypeError: (0 , _capitalize.default) is not a function错误

问题根源

你遇到的错误来自两个核心问题:

  1. 导出与导入方式不匹配:你的capitalize.js使用命名导出,但测试文件里用了默认导入,导致导入的capitalize为undefined,调用时报错。
  2. Jest对ESM模块的支持配置缺失:项目在package.json中设置了"type": "module"启用ES模块,但Jest默认使用CommonJS模块系统,需额外配置才能兼容。

解决步骤

步骤1:修复导出导入不匹配问题

两种可选方案,选其一即可:

方案A:将函数改为默认导出

修改js/scripts/capitalize.js的导出语句:

const firstChar = str => Array.from(str)[0];
const capitalize = str => firstChar(str).toUpperCase() + str.slice(1);

// 改为默认导出
export default capitalize;

方案B:测试文件使用命名导入

修改js/tests/capitalize.test.js的导入语句:

// 改为命名导入,对应原文件的命名导出
import { capitalize } from '../scripts/capitalize';

it('should capitalize first letter', () => {
  expect(capitalize('foo')).toBe('Foo');
});

it('should capitalize first letter', () => {
  expect(capitalize('egg')).toBe('Egg');
});

步骤2:配置Jest支持ES模块

因为项目启用了ESM,需要让Jest正确处理这类模块:

  1. 在项目根目录创建babel.config.json文件,内容如下:
{
  "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]]
}

该配置会让Babel将ES模块转译为Jest可识别的格式。

  1. (可选)若上述配置仍有问题,修改package.json中的test脚本,添加Node.js处理ESM的实验性标志:
"scripts": {
  "test": "NODE_OPTIONS=--experimental-vm-modules jest"
}

验证修复

完成配置后,重新运行测试命令:

npm test -- capitalize.test.js

此时测试应能正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:12:51