test 的第一个参数是测试用例的名称,第二个参数是一个函数,该函数会注入 t 对象。我们所有的断言都是通过这个注入的 t 进行的。
  友情提示:ava 的文档地址, https://github.com/avajs/ava ,也有中文版,但是没更新同步,所以建议还是看英文,否则用了一些过时的 API,以后升级之后追悔莫及。
  来说上面的代码。首先我们使用的是 async & await 语法,整个看起来比回调函数嵌套要整洁许多,整个流程看起来也相对清楚。
  第一步是先等待 jQuery 注入成功,拿到 $ 。其实这一步可有可无,我纯粹是为了测试 jsdom API,并且懒得手动写 dispatch 事件的代码才这么干的。
  接下来开始 DOM 查询,然后先获取 div 当前的背景色并打印出来。接着手动触发 click 事件,然后再次获取 div 的背景色并打印。后将触发点击前后的两个颜色值拿来对比。
  依葫芦画瓢,差不多这么搞定了。
  打开命令行,进入工作目录,然后开始测试:
  $ ava -v parallel.js
  相信我, -v 参数可以让你的命令行界面显得比较安静一些。
  如果你想要使用 npm test 这样的命令来测试,请进一步阅读文档进行相关配置(将上面的 ava 换成 nom test 是没用的哦)。这里主要还是为了简便。
  友情提示
  友情提示第二波:会不会怀疑,触发点击事件之后,颜色立马变了?不存在延迟、异步么?答案是 yes,真的不存在。假如你和我一样在这里犹豫了,那么说明存在这样两种可能性:
  js 基础不够牢,对相关机制的了解还不透彻
  你被各种异步玩怕了(hybrid / RN 后遗症 )
  当时为了应对“潜在的异步”(啊我想到了迫害狂想症),我特意做了几百毫秒的 setTimeout 延时。结果呢,断言的谓词(not、same、notSame等等)各种正向、反向都试了一遍,测试永远通过。什么鬼?说好的良好的异步支持呢?后来再去看文档,发现人家写得清清楚楚:
  You must define all tests synchronously. They can’t be defined inside setTimeout, setImmediate, etc.
  所有测试必须同步定义。不能放在 setTimeout、setImmediate 等方法里面。
  所以,真的,认真读文档是很有必要的。
  真正遇到要延时的,怎么办?我想,Promise 会解救你的。
  并行与串行
  ava 声称是很高效的。通常情况下,同一个文件里测试都是并行的,并不一定按照顺序执行。
  还以上面的代码为例。为了测试一下,我选择了投机取巧。不是并行吗?那我检测 jQuery 存不存在不行了吗?因为我们的 test 中,是异步加载 jQuery 的。所以如果测试是并行的,那么不一定能够检测到 window.$ 的存在。
  所以有了 parallel.js 这个文件。添加的测试用例如下:
  test('串行测试', function (t){
  console.log(window.$)
  t.true(!!window.$, '串行失败');
  });
  可是,如果我要串行呢?
  还好作者也想到了这种情况。将所有的 test 改成 test.serial 即可(见 serial.js )。
  需要说明的是,所谓的串行执行,只是在同一个测试文件中存在,同时测试多个文件的时候,总体而言仍然是并行的。
  结尾
  ava 还有很多的用法和需要注意的地方。好的办法还是看文档,然后自己写 demo,反复领会,并应用在实际业务中。
  上面提到的内容,可能有不少错误。希望懂行的大神们能够提出来。
  突然想到古人说,“苟日新,又日新,日日新”。
  虽然经过今人考证,这也许只是类似甲骨文的祭祀记录的误读。但几千年来,这种“新”的精神始终在。
  程序世界里,变化更是无时不在。的工具,明天也许会被淘汰。
  其实说到底,能够解决需求,能够方便高效使用的,才是好的。
  向做出这些工具的大神们致敬。
  更新
  a 标签点击事件的坑
  a 标签的点击事件用了事件代理,然后通过手动触发无效。
  经测试,在浏览器也有这种问题。
  解决办法是直接使用 $('a')[0].click() ,原生的 click 方法比较靠谱。