gpt4 book ai didi

node.js - 使用 Mocha、Chai 和 Sinon 对 Node.js 应用程序进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:48 24 4
gpt4 key购买 nike

我是 Node.js 应用程序单元测试的新手。我的应用程序经过一些过滤后将 CSV 文件转换为 JSON。

var fs = require('fs');
var readline = require('readline');

module.exports = ((year) => {
if (typeof year !== "number" || isNaN(year)){
throw new Error("Not a number");
}
var rlEmitter = readline.createInterface({
input: fs.createReadStream('./datasmall.csv'),
output: fs.createWriteStream('./data.json')
});

rlEmitter.on('line', function(line) {
/*Filter CSV line by line*/
});
rlEmitter.on('close', function() {
/*Write to JSON*/
});
});

我想对代码进行单元测试,特别是使用Sinon spy 、 stub 和模拟。例如,监视 createInterface,并且“close”事件的回调仅被调用一次。同样,“line”事件的回调被调用的次数与 csv 中的行数相对应。另外,如果 CSV 在开发期间不存在,如何模拟 CSV?

我尝试过的一个测试是,但不确定这是否是正确的方法:

describe("Test createInterface method of readline", function(err){
it("should be called only once", function() {
var spyCreateInterface = sinon.spy(readline, 'createInterface');
convert(2016);
readline.createInterface.restore();
sinon.assert.calledOnce(spyCreateInterface);
});

关于适当的单元测试以使该代码健壮的其他建议将受到高度赞赏。

最佳答案

当您尝试测试您的模块require的模块时,您可能希望使用类似 rewire 的内容。 “重新连接” require 调用。

var rewire = require("rewire");
var sinon = require("sinon");
var myModule = rewire("path/to/module");

describe("Test createInterface method of readline", function(err){
it("should be called only once", function() {
var readlineStub = sinon.stub();
myModule.__set__("readline", readlineStub);
myModule.convert(2016);
sinon.assert.calledOnce(spyCreateInterface);
});
});

关于node.js - 使用 Mocha、Chai 和 Sinon 对 Node.js 应用程序进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41829963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com