
1.4.4 实践
AVA是新一代测试框架,在用法上和上一代的Mocha略有不同,下面我们通过一些实例来学习。
➘ 集成AVA
第一步,创建test目录,以开发方式安装ava模块。

package.json里的变动如图1-7所示。

图1-7
注意,命令里使用的是-D,它是--save-dev的简写方式,这样安装的原因是,测试不应该出现在发布版本里,测试是辅助开发的工具。
创建第一个测试文件,测试基础API、变量、函数定义等,这样可以快速地保证函数的正确性。

使用AVA官方的测试示例,理解起来更加简单清晰,代码如下。

以上代码中定义了一个add函数,它有两个参数a和b,返回值是a+b。在测试用例里,我们通过调用add方法获取最终结果c,通过断言来比较c和我们期望的结果是否一致,即c=1+2,断言判断c===3即通过测试。其中test开头的方法是AVA测试用例写法,绝大部分测试框架也与此类似,执行结果如下。

为了更方便,可以将测试命令放到npm scripts的test中,这样就可以在命令行里执行npm test完成测试任务了。

这个示例演示了如何进行测试,故而要将测试函数add和具体的测试代码放到一起。AVA自身为了支持更多的高级特性而内置了Babel,所以在写AVA测试的时候可以使用ES模块的import关键字。
真正的TDD和BDD是测试优先的,即先写测试,然后才能写功能代码。还要注意一个极端的例子,做Java或C#测试的时候,连set方法和get方法都要测试。
➘ HTTP接口测试
SuperTest是Express框架里经典的测试HTTP API的框架,它非常简单,无须启动服务器就可以直接进行测试,并且对HTTP请求应答模型进行了适配(主要是断言集成),能够让我们更简单地完成测试,基本命令如下。

创建test/app.js文件,代码如下。

通过npm test命令执行以上代码,测试结果如下。

➘ 自动测试
通过监控文件变动来自动执行测试,几乎是一边编写代码一边监察测试的必备方式。其原理非常简单,通过fs模块里的watch方法监测文件变动,在AVA里是通过支持-w参数来实现的。

更简单的做法如下。

这种对-w参数的支持是基于测试框架层面的,更好的做法是使用Gulp这样的自动化构建工具里的watch任务来支持,相比之下更通用一些。