unit test


NodeJS中使用单元测试

Table of Contents 主流测试框架 Nodeunit Mocha QUnit Jasmine Vows 怎样抉择 我的尝试 Nodeunit Mocha 因为下了决心要实践TDD,所以无论使用什么语言,首先总是要确定一个单元测试框架。NodeJS,或者说Javascript,并不像Python、Smalltalk等一开始就有比较成熟的测试框架,因此Javascript中的测试框架选择可谓是百花齐放、百家争鸣,看得我是眼花缭乱。竞争是好事,一则让大家都有动力不断完善自己,二则也给不同口味的人提供了各自喜欢的菜色。对于刚接触的人来说,选择太多,反而是一种困扰。这个Wiki页提供了一个Javascript测试框架的较详细列表。 主流测试框架 “测试框架”这个词在Javascript这边,似乎又是一个让人疑惑的名词。根据NodeJS的这个页面,排名前几的几个模块分别是:nodeunit、chai、vows和jasmine-node,全然没有Mocha的身影。而到网上查询NodeJS的单元测试框架,则基本都会提到Mocha。渐渐深入后才发现,chai、should等都是提供基本的断言(Assertion)工具,而Mocha能提高更高层次的功能。 下面列举几个在我搜索过程中出镜率计较高的测试框架: Nodeunit 看名字就比较官方,支持异步调用和同步调用,直接浏览器和命令行两种调用方式。使用简单,文档也比较简单。 Mocha 官网上说是用于NodeJS的,同样支持异步和同步调用,直接浏览器和命令行调用方式;自己不带断言库,可以使用多种第三方断言库(如chai、should等)。直接多种风格的用例写法,包括TDD、BDD、QUnit等。 QUnit 没研究。 Jasmine BDD风格的测试框架。分客户端和服务端两种,没怎么研究。 Vows 没研究。 怎样抉择 很多人都有这样的疑问,但不是每个人都会到论坛上问,而且问了也不一定有认真的回答。万幸,这篇帖子里,人家精确地问了问题,又有好心人详细地回答了:How do I decide what testing framework to use? 这篇帖子中推荐的是QUnit,我没去尝试,因为我已经有选择了。帖子中提到的几点都是很好的考虑因素,但我觉得还不是很详细,下面补充几点我自己具化的理解: 是否支持命令行和浏览器两种测试载体。有很多代码都是不依赖浏览器的(对于NodeJS尤其如此),这种情况下使用命令行运行测试更方便。但如果只支持命令行方式,则意味着还必须为前端代码另外找一个测试框架 支持什么样风格的测试用例。比如Nodeunit只支持TDD风格的,而Mocha支持TDD、BDD、QUnit等许多风格。 支持的报告格式。刚开始时报告是给人看的,所以格式上有些差异没有什么影响,毕竟人能接受就可以了;过了一段时间,测试需要自动化,这时报告更多是给代码看的,那就完全不是一回事了。所以,如果不是想自己写报告解析器的话,挑选一个有自己想要的报告格式(如xUnit格式的)的测试框架吧 我的尝试 我在开始写测试用例的时候,并没有做好预习功课,只是看了有个叫Nodeunit的东西,看名字觉得比较官方(可见产品名称在小白用户的推广中,起到了非常重要的作用啊!),就使用了。写好几个测试用例后,才回过头来仔细调研了一番,发现大家还是比较推荐Mocha(产品口碑的重要性!),所以又改用Mocha了。从Nodeunit转到Mocha比较简单,毕竟测试代码基本是一致的,就是写法上有所差别。 Nodeunit Nodeunit没有单独的官网,项目托管在GitHub中,地址是:https://github.com/caolan/nodeunit。除了README.md外,就没有其他详细文档了。源码中examples目录提供了少量的示例代码可以参考。 安装 有了npm,安装都非常简单: npm install -g […]