在 Amazon Elastic Bamboo 实例上进行 AngularJS 单元测试
如何在 Amazon Elastic Bamboo 实例上设置单元测试环境
背景
我正在开发一个基于 AngularJS 的全新 SPA Web 应用程序。这个框架的优点在于能够用单元测试覆盖应用程序的几乎所有方面。而且,如果你使用像 angular-seed 这样的样板代码,它提供了单元测试核心,你只需要用真实的测试来扩展它,那么上手就非常容易。
在 Windows 笔记本电脑上完成本地设置只需几分钟:克隆 angular-seed,运行 npm 安装必要的包,并检查 karma 单元测试运行器是否正常工作,以及示例测试是否通过。虽然你可能会遇到一些与 PATH 变量相关的小问题,但修复它们并继续并不需要花费太多时间。
然后就轮到设置服务器环境了。我不熟悉 Linux,而且当时甚至不知道安装了哪种 Linux。我所拥有的只有 SSH 访问权限。我检查了 node、npm、karma 命令是否无法识别,并开始安装过程。经过多次尝试和错误,我卡在安装浏览器(尝试了 Chrome 和 Firefox)的步骤上,而浏览器对于 karma 单元测试运行器至关重要。存在对缺失 GTK+ 库的依赖,我最终放弃了这种方法。
但后来我发现了两件重要的事情:karma 支持的无头浏览器 PhantomJS,以及已经安装在服务器上的 node,但未在任何地方注册。所以我得到了一个干净的实例,并执行了以下步骤,最终得到了一个可用的环境。
Commands
查找已安装的 node,结果为 /opt/node-0.10/
find / -name node -print 2>/dev/null
链接 node 和 npm 二进制文件
cd /usr/bin
sudo ln -s /opt/node-0.10/bin/node
sudo ln -s /opt/node-0.10/bin/npm
安装必要的 npm 模块(我更喜欢全局部署)
sudo npm install karma -g
sudo npm install phantomjs -g
sudo npm install karma-jasmine -g
sudo npm install karma-spec-reporter -g
sudo npm install karma-phantomjs-launcher -g
链接 karma 二进制文件
sudo ln -s /opt/node-0.10/lib/node_modules/karma/bin/karma
修改 angular-seed 中的 karma.conf.js 配置文件,以使用 PhantomJS 浏览器
browsers: ['PhantomJS'],
plugins: [
'karma-spec-reporter',
'karma-phantomjs-launcher',
'karma-jasmine'
]
如果以上所有步骤都正确完成,那么 angular-seed 中的以下脚本应该报告单元测试执行成功(下面的脚本是 angular-seed 的早期版本的一部分,现在测试使用 npm 和 package.json 中的配置执行)
bash /scripts/test.sh
关注点
这对于那些没有太多 Linux/AWS/Bamboo 经验,但必须在相同的服务器配置中设置持续集成环境的人来说,应该是一个好的开始。