我在测试使用Promise的函数时Mocha返回错误结果时遇到问题。不知道为什么它返回“未定义”-被调用的函数(testFunction())在Promise完成之前不应该返回。
测试:
it('test1', function() {
let testResult = testFunction();
assert.equal(testResult,'success');
});
Promise:
getPromise() {
return new Promise((resolve, reject) => {
resolve('success');
}
}
testFunction()
testFunction = () => {
getPromise().then(result => { return result}
).catch(error =>{ return error });
}
结果:AssertionError [ERR_ASSERTION]:未定义=='成功'
testFunction
中没有return语句,因此它返回的是undefined。回调中的返回仅确定回调返回的内容,而不确定testFunction返回的内容。
由于您正在处理承诺,因此您必须退还承诺。您无法返回字符串,因为该字符串尚不存在。因此,testFunction可能看起来像这样:
testFunction = () => {
return getPromise()
.then(result => { return result })
.catch(error => { return error });
}
但是此.then
并没有做任何事情,因此,除非您没有提到一些额外的代码,否则可以将其删除:
testFunction = () => {
return getPromise()
.catch(error => { return error; });
}
您的测试需要编写,以期望能够兑现承诺。如果您使用异步功能,这是最简单的,例如:
it('test1', async function () {
let testResult = await testFunction();
asset.equal(testResult, 'success');
});
或者,您可以使用done
回调告诉测试异步工作何时完成。
it('test1', function (done) {
let promise = testFunction();
promise.then(testResult => {
assert.equal(testResult, 'success');
done();
});
});