如何导出在测试单元中使用的javascript类?

时间:2019-04-13 15:21:21

标签: javascript node.js class mocha

我正在研究自己的非图解算器实现。我正在用javaScript编写它,并希望使用mocha对其进行单元测试。我写了我自己的类,但不确定如何导出该类以在测试文件中使用。

这是test.js文件。

const assert = require('chai').assert;
const script = require('../script');

describe('Clue Object', function() {
    var result = script.Clue(10);

    it('This should make a Clue object with lb: 10', function() {
        assert.equal(result.lb, 10);
    });
});

这是我的主脚本文件中的类。

var exports = module.exports = {};

//----------------------------------------------------------------
// Classes
//----------------------------------------------------------------

/**
 * This is the Clue class. It creates a clue object.
 * 
 * @constructor
 * @param {number} x - the length of a black run.
 * @property {number} lb - the length of the black run.
 * @property {number} rS - the starting cell of the range.
 * @property {number} rE - the ending cell of the range.
 */
exports.Clue = function(x) {
    this.lb = x;
    this.rS = null;
    this.rE = null;

    Clue.prototype.setLB = function(x) {
        this.lb = x;
    }
    Clue.prototype.setRS = function(x) {
        this.rS = x;
    }
    Clue.prototype.setRE = function(x) {
        this.rE = x;
    }
}

当我尝试运行测试时,我不断收到TypeError:script.Clue不是函数。我对该错误有一点了解,但是我仍然不确定如何使其正确工作。

测试是查看是否创建了线索对象并在其中存储了数字。

1 个答案:

答案 0 :(得分:1)

您没有正确定义您的课程。它应该如下所示:

function Clue(x) {
    this.lb = x;
    this.rS = null;
    this.rE = null;
}
Clue.prototype.setLB = function(x) {
    this.lb = x;
}
Clue.prototype.setRS = function(x) {
    this.rS = x;
}
Clue.prototype.setRE = function(x) {
    this.rE = x;
}

module.exports = {
    Clue: Clue
}

请注意,默认情况下,lbrSrE是公开的,您不需要显式的setter。您可以使用更简单的ECMAScript 2015 class notation来简化所有操作:

class Clue {
    constructor(x) {
        this.lb = x;
        this.rS = null;
        this.rE = null;
    }
}

module.exports = {
    Clue: Clue;
}