anchor.diff:  });
   ----
   
  -像这样的话，就能在promise变为FulFilled的时候编写失败用的测试代码了。
  +像这样的话，就能在promise变为FulFilled的时候编写出失败用的测试代码了。
   
   .Promise onRejected test
   image::img/promise-test.png[Promise onRejected test]
   
   
   在 <<then-or-catch,then or catch?>> 中我们已经讲过，为了避免遗漏对错误的处理，
  -与使用 `.then(onFulfilled, onRejected)` 的第二个参数相比，
  +与使用 `.then(onFulfilled, onRejected)` 这样带有二个参数的调用形式相比，
   我们更推荐使用 `then` -> `catch` 这样的处理方式。
   
   但是在编写测试代码的时候，Promise强大的错误处理机制反而成了限制我们的障碍。
  
positive.code: <1> 返回的promise对象会变为FulFilled
  
  在这种情况下，由于在 `catch` 中注册的 `onRejected` 函数并不会被调用，因此
  `assert` 也不会被执行，测试会一直通过。
  
  为了解决这个问题，我们可以在 `.catch` 的前面加入一个 `.then` 调用，可以理解为如果调用了
  `.then` 的话，那么测试就需要失败。
  
negative.code: });
  ----
  
  采用这种方法，就能从根本上省略诸如 `.then(done, done);` 这样本质上跟测试逻辑并无直接关系的代码。
  
  [NOTE]
  ====
  http://efcl.info/2014/0314/res3708/[Mocha已经支持对Promises的测试 | Web scratch] 这篇（日语）文章里也提到了关于Mocha对Promise测试的支持。
  ====
  
  === 意料之外（失败的）的测试结果
  
  因为Mocha提供了对Promise的测试，所以我们会认为按照Mocha的规则来写会比较好。
  但是这种代码可能会带来意想不到的异常情况的发生。
  
  比如对下面的`mayBeRejected()` 函数的测试代码，该函数返回一个当满足某一条件就变为Rejected的promise对象。
  
  [source,javascript]
  [[mocha-rejected-promise-test]]
  