Javascript 如何正确测试Node.js中包含多个异步回调的方法?
我在Node.js相对较新。现在我正在用Mocha和Chai编写单元测试,在测试匿名函数中的代码时,我发现自己陷入了困境,这些匿名函数是作为异步函数的回调编写的 我重新创建了一些示例代码来解释我的情况。具有以下异步功能:Javascript 如何正确测试Node.js中包含多个异步回调的方法?,javascript,node.js,unit-testing,anonymous-function,asynccallback,Javascript,Node.js,Unit Testing,Anonymous Function,Asynccallback,我在Node.js相对较新。现在我正在用Mocha和Chai编写单元测试,在测试匿名函数中的代码时,我发现自己陷入了困境,这些匿名函数是作为异步函数的回调编写的 我重新创建了一些示例代码来解释我的情况。具有以下异步功能: asyncAddition = function (a, b, callback) { setTimeout(() => { callback(a + b); }, 3000); } asyncSubstraction = functio
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,用于断言承诺的事实
您可以编写代码来表达您真正的意思:
返回doSomethingAsync().should.finally.equal(“foo”)代码>
请参阅此处的更多信息:
如果您不想将函数变成承诺,则需要以这种方式测试代码
it(“使用setTimeout模拟异步代码!”,函数(完成){
setTimeout(函数(){
完成();
}, 3000);
});
太好了!但是,它是否适用于使用setTimeout
的代码?这将测试一个返回承诺的异步函数,我想在我的示例中测试的方法不是这样的。Thanx是您的答案,但是,再一次,这不是我在示例中尝试测试的。正如我在问题中所说,我需要从我的示例中测试“calculate”方法,它不接受任何回调。我需要根据传递给“calculate”的参数测试成员“result”的值。