重置 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
我是 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