实习生:使用 ES6 promises 测试异步单元测试
Intern: Testing async unit tests with ES6 promises
我有一些异步函数需要通过实习生进行测试。每个都使用 ES6 承诺。
在实习生文档中,它表示一旦 return 承诺得到解决,测试功能就会通过。但是,我不仅关心我正在测试的异步函数是否resolved/rejected,我还想检查以确保解析的值是否正确。
示例:我有我的函数:
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()。
我如何能够 resolve/reject 以断言为条件的承诺?我应该将断言包装在 try/catch 中吗?我没有在实习生文档中看到任何关于此的文档(并且大多数使用 this.async() 而不是 ES6 promises)。
您的代码中发生的事情是 getSomething
回调中的断言抛出异常,这会阻止 resolve
被调用。 getSomething
promise 将被拒绝,但由于您没有 return 在包装器 promise 的初始化器中使用它,包装器 promise 永远不会被解析或拒绝。
无需将 return 由 getSomething
编辑的承诺包装在新的承诺中。直接return就可以了。
我有一些异步函数需要通过实习生进行测试。每个都使用 ES6 承诺。
在实习生文档中,它表示一旦 return 承诺得到解决,测试功能就会通过。但是,我不仅关心我正在测试的异步函数是否resolved/rejected,我还想检查以确保解析的值是否正确。
示例:我有我的函数:
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()。
我如何能够 resolve/reject 以断言为条件的承诺?我应该将断言包装在 try/catch 中吗?我没有在实习生文档中看到任何关于此的文档(并且大多数使用 this.async() 而不是 ES6 promises)。
您的代码中发生的事情是 getSomething
回调中的断言抛出异常,这会阻止 resolve
被调用。 getSomething
promise 将被拒绝,但由于您没有 return 在包装器 promise 的初始化器中使用它,包装器 promise 永远不会被解析或拒绝。
无需将 return 由 getSomething
编辑的承诺包装在新的承诺中。直接return就可以了。