anchor.diff:  * 普通的代码采用 `then` -> `catch` 的流程的话比较容易理解
   ** 这是为了错误处理的方便。请参考 <<then-or-catch,then or catch?>>
   * 将测试代码集中到 `then` 中处理
  -** 为了能将AssertionError传递到测试框架中。
  +** 为了能将AssertionError对象传递到测试框架中。
   
   通过使用 `.then(onFulfilled, onRejected)` 这种形式的写法，
  -可以明确指定promise对象在变为 Fulfilled或Rejected时如何进行处理。
  +我们可以明确指定promise对象在变为 Fulfilled或Rejected时如何进行处理。
   
   但是，由于需要显示的指定 Rejected时的测试处理，
   像下面这样的代码看起来总是有一些让人感到不太直观的感觉。
  
positive.code: <1> 通过throw来使测试失败
  
  但是，这种写法会像在前面 <<then-or-catch,then or catch?>> 中已经介绍的一样，
  `failTest` 抛出的一次会被 `catch` 捕获。
  
  .Then Catch flow
  image::../Ch2_HowToWrite/img/then_catch.png[Then Catch flow]
  
  执行流程为 `then` -> `catch`，传递给 `catch` 的Error对象为`AssertionError`类型 ，
  这并不是我们想要的东西。
  
  也就是说，我们希望测试**只能**通过状态会变为onRejected的promise对象，
  如果promise对象状态为onFulfilled状态的话，那么该测试就会一直通过。
  
  === 明确两种状态，改善测试中的意外状况
  
  在编写 <<mocha-rejected-promise-test, 上面的对Error对象进行测试的例子>> 时，
  怎么才能剔除那些会意外通过测试的情况呢？
  
  最简单的方式就是像下面这样，在测试代码中判断在各种promise对象的状态下，进行如何的操作。
  
  变为FulFilled状态的时候::
      测试会预期失败
  
negative.code: });
  ----
  
  像这样的话，就能在promise变为FulFilled的时候编写出失败用的测试代码了。
  
  .Promise onRejected test
  image::img/promise-test.png[Promise onRejected test]
  
  
  在 <<then-or-catch,then or catch?>> 中我们已经讲过，为了避免遗漏对错误的处理，
  与使用 `.then(onFulfilled, onRejected)` 这样带有二个参数的调用形式相比，
  我们更推荐使用 `then` -> `catch` 这样的处理方式。
  
  但是在编写测试代码的时候，Promise强大的错误处理机制反而成了限制我们的障碍。
  