实习生:使用 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就可以了。