anchor.diff:  [[controllable-tests]]
   == 编写可控测试（controllable tests）
   
  -在继续进行说明之前，我们先来定义一下什么是可控测试。我们对可控测试的定义如下。
  +在继续进行说明之前，我们先来定义一下什么是可控测试。在这里我们对可控测试的定义如下。
   
   待测试的promise对象
   
  
positive.code: include::embed/embed-shouldRejected-test.js[]
  ----
  
  `shouldRejected` 函数接收一个にpromise对象作为参数，并且返回一个带有 `catch` 方法的对象。
  
  在这个 `catch` 中可以使用和 onRejected 里一样的代码，因此我们可以在 `catch` 使用基于 assertion 方法的测试代码。
  
  在 `shouldRejected` 外部，都是下面这些和普通的promise处理大同小异的代码。
  
  . 将需要测试的promise对象传递给 `shouldRejected` 方法
  . 在返回的对象的 `catch` 方法中编写onRejected处理的代码
  . 在onRejected里使用assertion进行测试
  
  在使用 `shouldRejected` 函数的时候，如果是 Fulfilled 被调用了的话，则会throw一个异常，测试也会失败。
  
  
negative.code: 此外，本小节中的helper方法都是以 <<mocha-promise,Mocha对Promise的支持>> 为前提的，
  在 <<done-promise-test,基于`done` 的测试>> 中使用的话可能会比较麻烦。
  
  是使用基于测试框架对Promis的支持，还是使用基于类似`done` 这样回调风格的测试方式，每个人都可以自由的选择，只是风格问题，我觉得倒没必要去争一个孰优孰劣。
  
  比如在 http://coffeescript.org/[CoffeeScript]下进行测试的话，由于CoffeeScript 会隐式的使用return返回，所以使用 `done` 的话可能更容易理解一些。
  
  对Promise进行测试比对通常的异步函数进行测试坑更多，虽说采取什么样的测试方法是个人的自由，但是在同一项目中采取前后风格一致的测试则是非常重要。
  