为什么 Mocha 在测试使用承诺的函数时返回未定义?
Why is Mocha returning undefined when testing function that uses a promise?
我在测试使用承诺的函数时遇到 Mocha 返回错误结果的问题。不确定它为什么返回 "undefined" - 被调用的函数 (testFunction()) 在承诺完成之前不应返回。
测试:
it('test1', function() {
let testResult = testFunction();
assert.equal(testResult,'success');
});
承诺:
getPromise() {
return new Promise((resolve, reject) => {
resolve('success');
}
}
testFunction()
testFunction = () => {
getPromise().then(result => { return result}
).catch(error =>{ return error });
}
结果:
断言错误[ERR_ASSERTION]:未定义=='success'
testFunction
中没有 return 语句,因此它是 return 未定义的。回调中的 return 只决定回调 return 是什么,而不是 testFunction returns.
由于您处理的是承诺,因此您将不得不 return 一个承诺。你不能 return 一个字符串,因为那个字符串还不存在。所以,testFunction 可能看起来像这样:
testFunction = () => {
return getPromise()
.then(result => { return result })
.catch(error => { return error });
}
但是这个 .then
没有做任何事情,所以除非有一些您没有提到的额外代码,否则可以将其删除:
testFunction = () => {
return getPromise()
.catch(error => { return error; });
}
您的测试需要编写为期望 returned 的承诺。如果您使用异步函数,这是最简单的,如:
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();
});
});
我在测试使用承诺的函数时遇到 Mocha 返回错误结果的问题。不确定它为什么返回 "undefined" - 被调用的函数 (testFunction()) 在承诺完成之前不应返回。
测试:
it('test1', function() {
let testResult = testFunction();
assert.equal(testResult,'success');
});
承诺:
getPromise() {
return new Promise((resolve, reject) => {
resolve('success');
}
}
testFunction()
testFunction = () => {
getPromise().then(result => { return result}
).catch(error =>{ return error });
}
结果: 断言错误[ERR_ASSERTION]:未定义=='success'
testFunction
中没有 return 语句,因此它是 return 未定义的。回调中的 return 只决定回调 return 是什么,而不是 testFunction returns.
由于您处理的是承诺,因此您将不得不 return 一个承诺。你不能 return 一个字符串,因为那个字符串还不存在。所以,testFunction 可能看起来像这样:
testFunction = () => {
return getPromise()
.then(result => { return result })
.catch(error => { return error });
}
但是这个 .then
没有做任何事情,所以除非有一些您没有提到的额外代码,否则可以将其删除:
testFunction = () => {
return getPromise()
.catch(error => { return error; });
}
您的测试需要编写为期望 returned 的承诺。如果您使用异步函数,这是最简单的,如:
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();
});
});