我需要使用Mocha测试函数testMe。但是当我的单元测试发生错误时会出现问题。这是简单的例子
function testMe(callback) {
new Promise((resolve, reject) => {
setTimeout(() => resolve([1,2,3]), 1000);
}).then((result) => {
callback(null, result);
}).catch((error) => {
callback(error, null)
});
}
testMe((err, result) => {
if(err) throw new Error();
if(result.length < 5) throw new Error();
});
在此示例中,throw运行后捕获块。但我只有在拒绝后才需要运行catch块。
编辑:
在这种情况下,脚本永远不会停止。我不明白为什么。
function testMe(callback) {
new Promise((resolve, reject) => {
setTimeout(() => resolve([1,2,3]), 1000);
}).then((result) => {
callback(null, result);
}, (error) => {
callback(error, null)
}).catch(() => {
console.log('Do not throw an error but still running');
});
}
testMe((err, result) => {
if(err) throw new Error();
if(result.length < 5) throw new Error();
});
答案 0 :(得分:2)
当你使用promises时,然后从函数返回promises而不是回调。
例如,而不是:
function testMe(callback) {
new Promise((resolve, reject) => {
// ...
});
}
使用:
function testMe(callback) {
return new Promise((resolve, reject) => {
// ...
});
}
通过这种方式,你可以为函数的调用者提供承诺。
如果你需要混合两种风格,即返回承诺和回调,请考虑使用可靠的库来处理这种情况,特别是如果你自己在这些风格之间编译翻译时遇到问题:
答案 1 :(得分:1)
您可以简单地return
the promise from the test:
function testMe() {
// ^^ drop the callback
return new Promise((resolve, reject) => {
// ^^^^^^ return the promise
setTimeout(() => resolve([1,2,3]), 1000);
});
}
var p = testMe().then(result) => {
// ^^^^^ use the promise
if(result.length < 5) throw new Error();
});
return p; // to mocha