狼书(卷2):Node.js Web应用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4.2 AVA测试框架

当然,上面列举的框架都是非常好的,但本书更推荐使用AVA。

AVA是Node.js世界里的面向未来的测试运行器。从2014年11月19日开始,其在很长一段时间内停止更新,2015年9月8日之后才又开始大量提交代码。它的源码深受Tape和TAP语法的启发。相对而言,AVA是高度自由的,由于并行执行测试,每个测试文件都在独立的进程里执行,所以它的执行效率更高。AVA的默认报告几乎是一看就懂的,并且AVA依然支持TAP输出,通过一个CLI标记即可实现。

简单地说,AVA是Mocha的替代品,它的优点如下。

○ 轻量和高效,强化断言信息,堆栈跟踪简明。

○ 测试语法简单,语义简单,集众家之长。

○ 执行效率更高,使用I/O并发,保证了测试的原子性。

○ 没有隐藏的全局变量。

○ 为每个测试文件隔离环境。

○ 基于ES2015编写测试,对语法支持更好,也支持aysnc/await函数。

○ 支持Promise、Generator、async、Observable。

○ TAP输出显示是可选的。

虽然JavaScript是单线程的,但在Node.js里,其具有异步特性,I/O可以并行执行。AVA利用这个特性让测试可以并行执行,这对于I/O繁重的测试特别有用。另外,测试文件可以在不同的进程里并行运行,每一个测试文件都可以获得更好的性能和独立的环境。在Pageres项目中,从Mocha切换到AVA可以让测试时间从31s下降到11s。测试并发执行强制我们编写原子测试,这意味着测试不需要依赖全局状态或其他测试的状态,这是一件非常好的事情。

对比一下AVA和Mocha,其差异如表1-6所示。

表1-6