angularjs中的单元测试实例
当ng项目越来越大的时候,单元测试就要提上日程了,有的时候团队是以测试先行,有的是先实现功能,后面再测试功能模块,这个各有利弊,今天主要说说利用karma和jasmine来进行ng模块的单元测试.
什么是Karma
karma是一个单元测试的运行控制框架,提供以不同环境来运行单元测试,比如chrome,firfox,phantomjs等,测试框架支持jasmine,mocha,qunit,是一个以nodejs为环境的npm模块.
安装测试相关的npm模块建议使用----save-dev参数,因为这是开发相关的,一般的运行karma的话只需要下面两个npm命令
npminstallkarma--save-dev npminstallkarma-junit-reporter--save-dev
安装karma的时候会自动的安装一些常用的模块,参考karma代码里的package.json文件的peerDependencies属性
"peerDependencies":{ "karma-jasmine":"~0.1.0", "karma-requirejs":"~0.2.0", "karma-coffee-preprocessor":"~0.1.0", "karma-html2js-preprocessor":"~0.1.0", "karma-chrome-launcher":"~0.1.0", "karma-firefox-launcher":"~0.1.0", "karma-phantomjs-launcher":"~0.1.0", "karma-script-launcher":"~0.1.0" }
然后一个典型的运行框架通常都需要一个配置文件,在karma里可以是一个karma.conf.js,里面的代码是一个nodejs风格的,一个普通的例子如下:
module.exports=function(config){ config.set({ //下面files里的基础目录 basePath:'../', //测试环境需要加载的JS信息 files:[ 'app/bower_components/angular/angular.js', 'app/bower_components/angular-route/angular-route.js', 'app/bower_components/angular-mocks/angular-mocks.js', 'app/js/**/*.js', 'test/unit/**/*.js' ], //是否自动监听上面文件的改变自动运行测试 autoWatch:true, //应用的测试框架 frameworks:['jasmine'], //用什么环境测试代码,这里是chrome` browsers:['Chrome'], //用到的插件,比如chrome浏览器与jasmine插件 plugins:[ 'karma-chrome-launcher', 'karma-firefox-launcher', 'karma-jasmine', 'karma-junit-reporter' ], //测试内容的输出以及导出用的模块名 reporters:['progress','junit'], //设置输出测试内容文件的信息 junitReporter:{ outputFile:'test_out/unit.xml', suite:'unit' }
}); };