我有一些我需要通过Intern测试的异步函数。每个都使用ES6承诺。
在实习生文档中,它表示只要解决了该承诺,就会传递返回承诺的测试函数。但是,我不仅关心我正在测试的异步功能是否被解析/拒绝,我还要检查以确保解析的值是正确的。
示例:我有我的功能:
function getSomething() {
return new Promise((resolve, reject) => {
// do some async stuff and resolve when done
setTimeout(function() {
resolve('the value');
}, 1000);
});
}
然后我有测试方法:
tdd.test('getSomething', function() {
return new Promise((resolve, reject) => {
getSomething().then(function(value) {
// I want to resolve/reject the promise BASED ON the assertion -- if the assertion fails, I want to reject the promise; if it succeeds, I want to resolve it
assert.equal(value, 'the value', 'getSomething should return "the value".');
resolve();
});
});
}
我注意到这不起作用 - 如果断言在我的测试中失败,则resolve()永远不会被调用。
我如何能够解决/拒绝以断言为条件的承诺?我应该在try / catch中包装断言吗?我没有看到关于这个实习生文档的任何文档(大多数使用this.async()而不是ES6 promises)。
答案 0 :(得分:3)
您的代码中发生的事情是getSomething
回调中的断言正在抛出异常,并且阻止resolve
被调用。 getSomething
承诺将被拒绝,但由于您未在包装器承诺的初始化程序中返回它,因此包装器承诺永远不会被解决或拒绝。
没有必要将getSomething
返回的承诺包装在新的承诺中。直接退回。