实习生:使用ES6承诺测试异步单元测试

时间:2016-11-22 00:21:33

标签: intern

我有一些我需要通过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)。

1 个答案:

答案 0 :(得分:3)

您的代码中发生的事情是getSomething回调中的断言正在抛出异常,并且阻止resolve被调用。 getSomething承诺将被拒绝,但由于您未在包装器承诺的初始化程序中返回它,因此包装器承诺永远不会被解决或拒绝。

没有必要将getSomething返回的承诺包装在新的承诺中。直接退回。