重置 moch 单元测试文件中的 module.exports 个对象

Reset module.exports object in moch unit test file

我是 nodejs 和 mocha 的新手,我编写了 js 程序来列出文件夹中的文件以及 mocha 和 chai 框架中的单元测试用例。

我想在这里实现的是,在每个测试用例之前,我想将我设置的对象重置为 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

下面是代码, test.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" 但输出相同

在 Node 中,模块是 cached,这意味着后续导入将 return 相同的实例 - 换句话说,您尝试执行的操作将不起作用。

强制模块每次重新加载你可以从require.cache中删除模块路径(尽管这样效率低下)。

或者,您可以手动设置模块的状态,即

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

或者更好的是,使用现有的存根/模拟库,例如 Sinon