Javascript 重置模块。导出moch单元测试文件中的对象

Javascript 重置模块。导出moch单元测试文件中的对象,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我是nodejs和mocha的新手,我已经编写了js程序来列出文件夹中的文件以及mocha和chai框架中的单元测试用例 我在这里试图实现的是,在每个测试用例之前,我想重置设置到module.export中的对象,并且我想获得文件夹中的文件数,该文件夹实际上位于数组“objResult”和“result”中 但是我要把计数加到之前的测试用例中 首先运行测试用例,然后从“0”开始,它包含85个文件。 请参见下面的输出 第二次测试用例运行,而不是从“0”开始,而是从“85”开始。 下面是代码, te

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

我在这里试图实现的是,在每个测试用例之前,我想重置设置到module.export中的对象,并且我想获得文件夹中的文件数,该文件夹实际上位于数组“objResult”和“result”中

但是我要把计数加到之前的测试用例中

首先运行测试用例,然后从“0”开始,它包含85个文件。 请参见下面的输出

第二次测试用例运行,而不是从“0”开始,而是从“85”开始。

下面是代码, test.js

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” 但在节点中,输出是相同的,模块是相同的,这意味着后续的导入将返回相同的实例-换句话说,您尝试执行的操作将不起作用

每次可以从中删除模块路径时强制重新加载模块(尽管这是低效的)

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

readerExport.result = [];
readerExport.objResult = [];
或者更好地使用现有的存根/模拟库,如

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.result = [];
readerExport.objResult = [];