Как экспортировать класс javascript для использования в тестовом модуле? - PullRequest
0 голосов
/ 13 апреля 2019

Я работаю над собственной реализацией решателя неграмм.Я пишу это в javaScript и хотел сделать модульный тест для него с мокко.Я написал свой собственный класс, и я не уверен, как экспортировать его для использования в тестовом файле.

Это файл 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 не является функцией.У меня есть небольшое понимание ошибки, но я все еще не уверен относительно того, как заставить ее работать правильно.

Проверка состоит в том, чтобы проверить, создан ли объект Clue и в нем есть сохраненный номер.

1 Ответ

1 голос
/ 13 апреля 2019

Вы не правильно определяете свой класс. Это должно выглядеть следующим образом:

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
}

Обратите внимание, что lb, rS и rE являются общедоступными по умолчанию, и вам не нужны явные установщики. Вы можете упростить все, используя более простую нотацию класса ECMAScript 2015 :

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

module.exports = {
    Clue: Clue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...