如何在Node.js的回调中正确测试代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Node.js的回调中正确测试代码?相关的知识,希望对你有一定的参考价值。
我在Node.js相对较新。现在,我用Mocha和Chai编写单元测试,结果发现自己在测试匿名函数内的代码时陷入困境,这些匿名函数被编写为异步函数的回调。
我重新创建了一些示例代码来解释我的情况。具有这些异步功能:
asyncAddition = function (a, b, callback) {
setTimeout(() => {
callback(a + b);
}, 3000);
}
asyncSubstraction = function (a, b, callback){
setTimeout(() => {
callback(a - b);
}, 3000);
}
[我想在不将任何回调作为参数的类方法calculate
中使用它们,而仅使用两个操作数a
和b
以及具有计算类型的字符串,这是异步进行的,将结果放入result
成员中:
class Example{
constructor(){
this.result = null;
}
calculate(a, b, action){
if (action == "add") {
asyncAddition(a, b, (result) =>{
this.result = result;
console.log("Addition result is: " + result);
});
}
else if (action == "substract") {
asyncSubstraction(a, b, (result) =>{
this.result = result;
console.log("Substraction result is: " + result);
});
}
}
}
由于result
中的值是在回调代码中设置的,我该如何为calculate
方法编写适当的测试,该方法根据不同的操作数和计算来检查result
值?
答案
您可以使用Chai断言作为承诺。该软件包为Chai提供了一种流利的语言,用于断言有关诺言的事实。
您可以编写表达您真正含义的代码:
return doSomethingAsync().should.eventually.equal("foo");
在此处查看更多:https://www.chaijs.com/plugins/chai-as-promised/
如果您不想将功能变成承诺,则需要以这种方式测试代码
it("Using setTimeout to simulate asynchronous code!", function(done){
setTimeout(function() {
done();
}, 3000);
});
以上是关于如何在Node.js的回调中正确测试代码?的主要内容,如果未能解决你的问题,请参考以下文章