![](/img/trans.png)
[英]Why is my map function returning undefined when used within a promise?
[英]Why is Mocha returning undefined when testing function that uses a promise?
在測試使用 promise 的函數時,我遇到了 Mocha 返回錯誤結果的問題。 不知道為什么它返回“未定義” - 被調用的函數 (testFunction()) 在承諾完成之前不應該返回。
測試:
it('test1', function() {
let testResult = testFunction();
assert.equal(testResult,'success');
});
承諾:
getPromise() {
return new Promise((resolve, reject) => {
resolve('success');
}
}
測試函數()
testFunction = () => {
getPromise().then(result => { return result}
).catch(error =>{ return error });
}
結果:斷言錯誤 [ERR_ASSERTION]:未定義 == 'success'
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();
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.