Сброс объекта module.exports в файле тестового модуля moch - PullRequest
0 голосов
/ 27 января 2020

Я новичок в nodejs, и мы с мокко написали программу js, чтобы вывести список файлов в папке, а также пример модульного теста в среде мокко и чай.

What I ' Здесь я пытаюсь добиться того, чтобы перед каждым тестом я хотел сбросить объект, который я установил, в module.export, и я хочу получить количество файлов в папке, которая фактически находится в массиве «objResult» и «result».

Но я получаю счет, добавленный к предыдущему запуску тестового набора,

Первый запуск тестового примера, затем начинается с «0» и он насчитывает 85 файлов. См. Ниже вывод,

Второй прогон теста, вместо того, чтобы начинаться с «0», он начинается с «85»

 readDirectory(dirname)
Start - 0
End - 85
    √ should set array objResult with the values
Start - 85
End - 170
    √ should set array result with the values

Ниже приведен код теста. js

let assertMocha = require("assert");
let assert = require("chai").assert;
let expect = require("chai").expect;
let readerExport = require("../temp/DocReader")

describe("readDirectory(dirname)", function () {

    let readerExport1;
    beforeEach(function () {
        readerExport1 = null;
        readerExport1 = require("../temp/DocReader")
        readerExport1.readDirectory(readerExport1.directory);
    })

    it("should set array objResult with the values", function () {
        assert.isAbove(readerExport1.objResult.length, 0, "array should contain some value");
    });

    it("should set array result with the values", function () {
        assert.isAbove(readerExport1.result.length, 0, "array should contain some value");
    });
})

DocReader. js

let fs = require('fs');
let directory = "C:\\temp\\";
let result = [];
let objResult = [];

function ResultObject(filename) {
    this.filename = filename;
}

function readDirectory(dirname) {
    if(dirname==null || dirname.trim()==""){
        throw new TypeError("Expects directory path as parameter");
    }
    var files = fs.readdirSync(dirname);

    readFiles(files, dirname);
    var newArray = objResult;

    newArray.forEach(function (item) {
        result.push(item.filename + " | " + item.testId + " | " + item.status + " | " + item.duration + " | " + item.name);
    })
}

function readFiles(files, dirname) {
    if(files==null || dirname==null){
        throw new TypeError("Expects array of files and directory as parameter");
    }

    for (let filename of files) {
        try {
            objResult.push(new ResultObject(
                filename));
        }
        catch (err) {
            console.log(`${err}`);
        }
    }
}

module.exports = {
    readDirectory:readDirectory,
    readFiles:readFiles,
    ResultObject: ResultObject,
    objResult:objResult,
    directory:directory,
    result:result
};

Я пытался использовать существующую переменную, т. Е. «ReaderExport». Я также создал новую переменную, т. Е. «Let readerExport1», но вывод такой же

1 Ответ

0 голосов
/ 27 января 2020

В Node модули кэшируются , что означает, что последующий импорт вернет тот же экземпляр - другими словами, то, что вы пытаетесь сделать, не будет работать.

Для принудительной установки модуля для перезагрузки каждый раз, когда вы можете удалить путь к модулю из require.cache (хотя это неэффективно).

В качестве альтернативы, вы можете вручную установить состояние модуля, например

readerExport.result = [];
readerExport.objResult = [];

Или еще лучше, используйте существующую библиотеку заглушек / насмешек, такую ​​как Sinon

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...