如何测试承诺是否定义了 catch 方法?

How to test a promise has a catch method defined?

我有一个方法returns一个承诺。

doStuf() { 
  return somePromise
    .then(...)
    .catch(e => {...}) 
}

我想编写一个测试来确保 doStuff 方法返回的承诺有一个 catch 方法。

怎么做?

那不是测试有用的东西。考虑到 doStuf 稍后可能会重构为更多层次的东西,其中可能存在多个 then-catch 链,或者实现将以其他方式改变。

您实际上并不想测试实现,因为您可以简单地查看它以查看 promise 是否具有catch。不,您想测试 doStuf 行为 。你想断言 doStuf returns 一个承诺,并且那个承诺 returns 给定特定输入的期望值。例如:

doStuf('foo').then(r => /* assert r equals expected outcome */)
doStuf('bar').catch(r => /* assert r equals expected error */)