Node+TypeScript环境下Jest测试报错:TypeError: x is not a function
解决Jest测试TypeScript函数时的TypeError: x is not a function问题
问题原因
你的x.ts使用了命名导出(export function x),但测试文件用require导入时,默认获取的是整个模块对象,而非直接的函数。此时变量x是一个包含x属性的对象,直接调用x(1,2)自然会报错“不是函数”。
解决方法
方法1:修改测试文件的导入方式(推荐)
将测试文件的导入语句改为解构导入,提取出命名导出的函数:
const { x } = require('../functions/x'); describe("Running test", () => { test('Should return results', () => { const result = x(1,2) expect(result).toBe(3) }); });
如果你的项目配置了ES模块支持,也可以用ES模块语法导入:
import { x } from '../functions/x'; describe("Running test", () => { test('Should return results', () => { const result = x(1,2) expect(result).toBe(3) }); });
方法2:修改TS文件的导出方式为默认导出
将x.ts中的命名导出改为默认导出:
export default function x(a: number, b: number) { return a + b }
此时测试文件的原导入语句即可正常使用:
const x = require('../functions/x');
额外注意事项
- 确保你的Jest配置正确处理TypeScript,比如安装了
ts-jest并在jest.config.js(或jest.config.ts)中指定preset: 'ts-jest'。 - 检查
tsconfig.json中的module选项,若使用CommonJS则对应require语法,若使用ESNext则对应import语法,保持导入导出风格一致。
内容的提问来源于stack exchange,提问作者xyz83242
相关产品推荐
相关产品推荐

