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
相关产品推荐
相关产品推荐

