使用Karma来驱动mocha测试
从Testacular到Karma的变化
2013年03月18日,Testacular正式被重命名为Karma。具体原因,讲起来缺也很滑稽。这里面不含有任何的商业成分,只是因为Testacular与Testicular很相似,因此令人感觉尴尬。仅仅此而已,谁让JsTestDriver已经被别人给拿走了。
安装:
1  | npm install -g karma  | 
什么时候使用Karma?
- 在真实浏览器里测试。
 - 在多种浏览器里进行测试(包括桌面、移动)。
 - 在本地开发环境执行测试。
 - 想在持续集成CI内运行测试。
 - 想在每次保存代码时,自动执行测试。
 - 热衷于terminal小黑屏。
 - 不想陷入令人厌烦的测试生活。
 - 想使用Istanbul自动生成coverage报告。
 - 想在源码中使用RequireJS。
 
Karma不是Testing Framework
Karma自从出现,就是一直作为一个Test Runner而存在的,只是用来驱动测试的框架。不过到目前为止,它支持以下流行的测试框架。
Mocha
Jasmine
QUnit
Karma与Test Framework集成
Karma对各种Test Framework的支持是以插件的模式进行支持的。
只需要在karma.conf.js进行以下配置(mocha为例):
1  | frameworks = ['mocha'];  | 
在此处只是配置了一下,具体支持的plugin要在当前目录下进行安装:
1  | npm install karma-mocha  | 
其他框架依此类推。
Karma报告
Karma的报告(reporter)也是以插件模式进行的。
JUnit Reporter
首先,要定义reporter类型,在karma.conf.js添加:
1  | reporters = ['junit'];  | 
如果想更近一步的话,可以配置一下报告的位置。
1  | junitReporter = {  | 
报告配置完了,自然要有依赖啊。执行npm install karma-junit-reporter来安装。然后在加上这个plugin:
1  | plugins = [  | 
Coverage Reporter
同JUnit Reporter一样,首先添加:
1  | reporters = ['coverage'];  | 
进一步的配置coverage report:
1  | coverageReporter = {  | 
其中,type用于指出报告类型;dir用于指出生成报告的存放目录。
type包括:
- html (default)
 - lcov (lcov and html)
 - lcovonly
 - text (standard output)
 - text-summary (standard output)
 - cobertura (xml format supported by Jenkins)
 
下面,需要安装依赖npm install karma-coverage。并在配置文件内添加:
1  | plugins = [  | 
创建一个样例
1.执行‘karma init’,然后根据提示按Tab键进行相关选择。先生成一个默认的配置文件,这个是可以再修改的。
2.创建一个src文件夹,用于存放待测试的JS代码。然后在创建一个test文件夹,用于存放自己写的单元测试代码。
3.以mocha为例,将mocha集成到karma中,使用karma来驱动测试。这需要在karma.conf.js里进行如下配置:
1  | // Karma configuration  | 
4.放入相应的代码到src以及test目录里。执行’karma start’命令, 浏览器将会被打开,然后执行相应的Test。效果如下图:
完整样例代码:
https://github.com/blueshen/Karma-mocha-example
IntelliJ IDEA集成
为了在项目中开发方便,那么在开发中集成到IDE中,会节省N多时间的。下面就先来说说于IDEA的集成。
1.安装NodeJS插件:
Settings –> IDE Settings –> Plugins –> Browse repositories –> NodeJS 选中,然后右键Download and Install进行安装。重启后成功安装。
2.配置Karma Server:
从菜单Run –> Edit Configurations… –>点击 ‘+’新建一个Node.js类型的配置。
出现以下的界面:
其中:
Name: 任意,本处为Karma node Server
Path to Node: node可执行全路径。$NODE_PATH/bin/node
Working Directory: 当前项目的跟路径
Path to Node App JS File: 此处为karma的可执行全路径。
Application Parameters: 要执行的命令,此处为start
Environment variables: 就是环境变量了。此处我定义了CHROME_BIN来指出CHROME浏览器路径。
3.配置Karma run
同Karma Server,只是修改Application Parameters为run
配置成功后,运行Karma node Server可以看到浏览器就可以正常启动了。console也正确的输出。如同在terminal里执行一般。需要注意的是,本地开发时,需要将singleRun=false,也就是说执行完测试之后不退出。只有在CI环境下才用true。
在浏览器启动之后,如果修改了源代码,Test能否自动执行呢?可以将autoWatch=true,这样当你修改代码后,保存后能自动执行,方便开发了。如果autoWatch=false了,那么这时间就要执行Karma run了,用于在Karma Server上重新执行。