anchor.diff:  [[basic-tests]]
  -== 基础测试
  +== 基本测试
   
  -<<es6-promises,ES6 Promises>>的语法等已经学了一遍，
  -大家应该能够在实际项目中编写出运用Promise 的Demo。
  +关于<<es6-promises,ES6 Promises>>的语法我们已经学了一些，
  +我想大家应该也能够在实际项目中编写Promise 的Demo代码了吧。
   
  -这时，接下来要苦恼该如何进行的就是Promise 测试的写法。
  +这时，接下来你可能要苦恼该如何编写Promise 的测试代码了。
   
  -那么让我们先来学习下使用http://visionmedia.github.io/mocha/[Mocha]的Promise 的基础测试写法吧。
  +那么让我们先来学习下如何使用http://visionmedia.github.io/mocha/[Mocha]来对Promise 进行基本的测试吧。
   
  -先声明一下，这章中涉及的测试代码都是运行在Node.js环境的。
  +先声明一下，这章中涉及的测试代码都是运行在Node.js环境下的。
   
   [NOTE]
  -本书中出现的实例代码都样编写了各种测试。
  -测试代码可以参照 https://github.com/azu/promises-book[azu/promises-book] 。
  +本书中出现的示例代码也都有相应的测试代码。
  +测试代码可以参考 https://github.com/azu/promises-book[azu/promises-book] 。
   
   === Mocha
   
  -在这里，我们不展开详细讲解http://visionmedia.github.io/mocha/[Mocha]了，Mocha是Node.js下的测试框架工具。对
  -http://visionmedia.github.io/mocha/[Mocha]感兴趣的可以自行学习。
  +Mocha是Node.js下的测试框架工具,在这里，我们并不打算对http://visionmedia.github.io/mocha/[Mocha]本身进行详细讲解。对
  +http://visionmedia.github.io/mocha/[Mocha]感兴趣的读者可以自行学习。
   
  -Mocha能够选择BDD、TDD、exports中的任意风格，测试中用到的Assert 方法同样可以跟任意库组合来使用。
  -也就是说，Mocha本身只提供执行测试时的框架，其他的需要使用者来选择。
  +Mocha可以自由选择BDD、TDD、exports中的任意风格，测试中用到的Assert 方法也同样可以跟任何其他类库组合使用。
  +也就是说，Mocha本身只提供执行测试时的框架，而其他部分则由使用者自己选择。
   
  -这里选择Mocha理由，有下面3点。
  +这里我们选择使用Mocha，主要基于下面3点理由。
   
  -* 它是非常有名的测试框架
  -* 支持Node.jp 和浏览器测试
  +* 它是非常著名的测试框架
  +* 支持基于Node.js 和浏览器的测试
   * 支持"Promise测试"
   
  -最后至于为什么说_支持"Promise测试"_，这个我们在后面讲。
  +最后至于为什么说_支持"Promise测试"_，这个我们在后面再讲。
   
  -另外，Assert库我们使用的是 https://github.com/twada/power-assert[power-assert]，
  -Assert本身跟Node.js的 `assert` 模块完全相同，本书中不用太在意。
  +要想在本章中使用Mocha，我们需要先通过npm来安装Mocha。
   
  -首先，让我们试着编写一个与回调函数测试形式相同的测试。
  +[source,console]
  +----
  +$ npm install -g mocha
  +----
  +
  +另外，Assert库我们使用的是Node.js自带的`assert`模块，所以不需要额外安装。
  +
  +首先，让我们试着编写一个对传统回调风格的函数进行测试的代码。
   
   === 回调函数风格的测试
   
  -<<promise-is-always-async,column: Promise总是异步?>>中确认过的，
  -Promise中调用由`then` 绑定的函数的时机总是非同步的。
  +在<<promise-is-always-async,栏: Promise只能进行异步操作？>>中我们已经讲过，
  +Promise中对 `then` 绑定的函数的调用总是异步进行的。
   
  -首先让我们试着像回调风格那样编写一个Promise测试。
  +如果想使用回调函数风格来对一个异步处理进行测试，使用Mocha的话代码如下所示。
   
   [source,javascript]
   .basic-test.js
  
positive.code: });
  ----
  
  这可测试中 `assert` 失败了，你可能认为会抛出“测试失败”，
  实际情况却是测试不能正常终了而超时。
  
  .测试没有完了产生超时，停在该处。
  image::img/promise-test-timeout.png[promise test timeout]
  
  `assert` 失败的情况通常throw一个error，
  测试框架捕获该error，来判断测试失败。
  
  但是，Promise的情况下 `.then` 绑定的执行函数发生的error，
  会被Promise捕获，从而测试框架不会抛出error。
  
  我们来改善一下<<promise-assert-fail,`assert` 失败示例>>，
  让`assert` 失败时显示测试失败。
  
  [source,javascript]
  [[promise-assert-fail-fixed]]
  
negative.code: include::test/basic-test.js[]
  ----
  
  将这段代码保存为 `basic-test.js`，之后就可以使用刚才安装的Mocha的命令行工具进行测试了。
  
  [source,sh]
  ----
  $ mocha basic-test.js
  ----
  
  Mocha的 `it` 方法指定了 `done` 参数，在 `done()` 函数被执行之前，
  该测试一直处于等待状态，这样就可以对异步处理进行测试。
  
  Mocha中的异步测试，将会按照下面的步骤执行。
  
  [source,javascript]
  [[callback-style-test]]
  