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

Mocha测试报错TypeError: operations.Node不是构造函数求助

解决Mocha测试中无法实例化Node的问题

这个报错TypeError: operations.Node is not a constructor的核心原因很明确——你在operations.js里定义的Node构造函数没有被导出,导致test.js通过require引入后,根本访问不到这个构造函数。

第一步:导出operations.js里的Node构造函数

修改你的operations.js,在代码末尾加上导出语句,把Node暴露出去:

function Node(val, left, right) {
  this.val = val;
  this.left = left;
  this.right = right;
}

// 导出Node构造函数,同时预留你后续要写的deserialize、serialize函数位置
module.exports = {
  Node,
  // 后续可以添加:deserialize: function() {...}, serialize: function() {...}
};

第二步:在test.js里正常使用

现在你在test.js里用new operations.Node()就不会报错了。另外,你的测试代码还有个小细节需要调整——assert.equal的写法不符合规范,应该把实际值和预期值分别作为参数传入,而不是传入一个比较结果:

const assert = require('assert');
const operations = require('./operations.js');

it('Calculates correct deserialization', () => {
  var leftLeft = new operations.Node('left.left', null, null);
  var left = new operations.Node('left', leftLeft, null);
  var right = new operations.Node('right', null, null);
  var root = new operations.Node('root', left, right);
  // 修正assert.equal的参数顺序
  assert.equal(operations.deserialize(operations.serialize(root)).left.left.val, 'left.left');
});

如果你想直接在test.js里用new Node()而不是operations.Node,可以改成结构赋值的方式导入:

const assert = require('assert');
const { Node, deserialize, serialize } = require('./operations.js');

it('Calculates correct deserialization', () => {
  var leftLeft = new Node('left.left', null, null);
  var left = new Node('left', leftLeft, null);
  var right = new Node('right', null, null);
  var root = new Node('root', left, right);
  assert.equal(deserialize(serialize(root)).left.left.val, 'left.left');
});

这样不管哪种方式,都能解决构造函数无法访问的问题,严格模式下只要正确导入导出,完全不会有影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 08:52:31