将AngularJS的单元测试和端到端测试集成到gradle构建脚本中
我目前工作的一个项目后端使用java和spring建立了一个restful service,前端使用AngularJS来渲染页面,提供用户接口。在前端的AngularJS项目中,我们使用Jasmine来写单元测试,使用AngularJS自带的Angular_scenario来写端到端测试。运行这些测试则使用的是Karma。
虽然使用Karma在命令行下可以很方便的运行所有的测试,但是我们想将这些集成到gradle的构建脚本中,从而将AngularJS的所有测试加入到CI的构建中。同时为了保证运行测试的效率,我们决定使用PhantomJS作为运行测试的浏览器环境。
环境搭建
安装nodeJS。 直接去官网<http://nodejs.org/ >下载最新的安装包进行安装。
安装Karma。 可以使用nodeJS提供的npm(node package manager)来安装。
1 | $ npm install -g karma |
如果想安装最新的开发者版本,则运行:
1 | $ npm install -g karma@canary |
- 安装PhantomJS。
方式一:使用npm来安装:
1 |
|
方式二:从官网上下载最新的安装包自行安装。地址是http://phantomjs.org/ 。
不过为了方便其它人的使用,我将PhantomJS的文件直接放置到了项目的codebase中,并加入了svn管理。这样当setup一个新的工作电脑时就不需要安装它了,直接checkout项目代码就行。最大的原因是当Karma运行测试时会根据环境变量寻找PhantomJS的执行文件,将PhantomJS的执行文件放置在统一的地方方便管理,减少环境变量依赖。
配置Karma运行测试的配置文件
方式一:在项目根目录下运行Karma init
,根据提示一步步创建配置文件。
方式二:如果对Karma的配置文件较为熟悉的话,可以自行创建一个。
以下是我为unit test创建的配置文件。
1 |
|
由于需要在CI中运行测试,所以应当将autoWatch设置为false,将singleRun设置为true。这样Karma只会运行一遍测试。
由于我们将PhantomJS放置在工程目录下,为了让Karma能找到PhantomJS的执行文件,需要设置环境变量PHANTOMJS_BIN。在Karma.conf.js中加入如下代码:
1 |
|
如果Karma运行测试时找不到浏览器的执行文件,会报一个错误。
1 |
|
当时我花了好长时间来寻找原因,最后使用karma start karma.conf.js --log-level=debug
来查看运行日志。
1 |
|
通过DEBUG的log我发现C:\Program Files\PhantomJS\phamtomjs.exe
下并未有该文件,最后使用上述的方法来设置PhantomJS的环境变量。(奇怪的是我已经在PowerShell里设置了该环境变量,并且Karma命令行也是在PowerShell运行的,但是nodeJS并未获取正确的环境变量值)。
在build.gradle中加入运行Karma的task
由于我们的开发机以及CI服务器都是Windows环境,所以需要调用CMD来执行Karma命令。
配置如下:
1 |
|
注意运行端到端测试前要将restful服务器setup起来。
当时在Windows上配置Karma花了很多功夫,使用Firefox浏览器发现会同时打开3个tab页,并且将singRun改为true不能运行成功,使用Chrome浏览器则测试运行完毕后浏览器无法关闭,使用PhantomJS又由于环境变量的问题花了一些时间来找原因。但是在我自己的苹果笔记本上各个浏览器都工作良好,真想说Windows是个奇葩。
对于普通用户来说可能Windows系统更适合他们,但是对于程序员来说MAC系统真的非常棒,反应迅速,配置简单,能让你的开发效率提升一个档次。