在 Promise 处理程序中使用断言的好策略是什么

m90*_*m90 3 testing mocha.js node.js promise

我想使用 mocha 测试异步操作返回的值。这些值是通过普通的 A+ 承诺提供的。不幸的是,.then处理程序现在将吞下所有抛出的异常,assert因此无论如何测试都会通过:

someOp().then(function(result){
  // throws, but will be swallowed
  assert(result.indexOf('I_DONT_WANT_THAT') < 0);
  done();
});
Run Code Online (Sandbox Code Playgroud)

如何正确测试异步操作的结果?我能想到的只是无休止地传播错误,但在某些时候,我需要断言抛出一个真正的错误,使我的测试失败。

rob*_*lep 5

如果你返回它们,摩卡可以处理它们:

it('value should be 0', function() {
  return Promise.resolve(1).then(function(value) {
    assert(value === 0);
  });
});
Run Code Online (Sandbox Code Playgroud)