使用Mocha测试JavaScript静态方法遇类型错误求助
问题解决:TestUtils.test1 不是函数的报错原因及修复方法
问题出在模块导入导出的语法不匹配:
- 你的
TestUtils类用了ES模块的export default导出 - 测试代码却用CommonJS的
require()导入,直接赋值的话,拿到的是一个包含default属性的模块对象,而不是类本身,自然找不到test1静态方法。
给你三种修复方案,选适合你的就行:
方案1:调整require导入逻辑,取default属性
直接在require后加.default,拿到实际导出的类:
const TestUtils = require("path to TestUtils").default; describe("TestUtils", function () { it("test1 returns 42", function () { expect(TestUtils.test1()).is.equal(42); }); });
方案2:测试文件改用ES模块导入
先确保项目支持ES模块(在项目根目录的package.json里添加"type": "module"),然后把测试代码改成import语法:
import TestUtils from "path to TestUtils"; describe("TestUtils", function () { it("test1 returns 42", function () { expect(TestUtils.test1()).is.equal(42); }); });
方案3:修改TestUtils的导出方式为CommonJS
如果项目更倾向于用CommonJS,把TestUtils的代码改成:
class TestUtils { static test1() { return 42; } } module.exports = TestUtils;
这样原来的require导入代码就能正常运行,不需要修改测试文件。
内容的提问来源于stack exchange,提问作者Tima
相关产品推荐
相关产品推荐

