设为首页 收藏本站
查看: 1069|回复: 0

[经验分享] 手把手教你如何安装和使用Karma-Jasmine

[复制链接]

尚未签到

发表于 2017-2-23 10:45:57 | 显示全部楼层 |阅读模式
  注意:本文中出现的资料链接、karma的插件安装等,均可能需要翻$墙后才能正确执行。
  Jasmine是一个Javascript的测试工具,在Karma上运行Jasmine可完成Javascript的自动化测试、生成覆盖率报告等。本文不包含Jasmine的使用细节,这几天我会写一篇Jasmine的入门文章,有兴趣的朋友到时候可以看一下。

步骤一:安装Node.JS(版本:v0.12.4, windows-64)
  Karma是运行在Node.js之上的,因此我们首先要安装Node.js。到 https://nodejs.org/download/ 下载你系统所需的NodeJS版本,我下载的是windows-64位的msi版。
  下载之后,双击 node-v0.12.4-x64.msi 运行并安装,这个就不赘述了, 不断下一步即可, 当然最好将目录改一下。
  图1(选择安装内容,默认即可):
DSC0000.png


步骤二:安装Karma
  运行Node.js的命令行程序:Node.js command prompt:
  图2(处于“开始->所有程序->Node.js”中):
DSC0001.png

  图3(我们将安装到E:\Karma路径下):
DSC0002.png

  输入命令安装Karma:



npm install karma --save-dev
  图4(Karma安装完毕后):
DSC0003.png


步骤三:安装karma-jasmine/karma-chrome-launcher插件
  继续输入npm命令安装karma-jasmine、karma-chrome-launcher插件:



npm install karma-jasmine karma-chrome-launcher --save-dev
  图5(karma-jasmine、karma-chrome-launcher安装完毕之后):
DSC0004.png


步骤四:安装karma-cli
  karma-cli用来简化karma的调用,安装命令如下,其中-g表示全局参数,这样今后可以非常方便的使用karma了:



npm install -g karma-cli
  图6(karma-cli安装完毕之后):
DSC0005.png


Karma-Jasmine安装完毕:
  图7(安装完毕后,在E:\Karma文件夹下会有一个node_modules目录,里面包含刚才安装的karma、karma-jasmine、karma-chrome-launcher目录,当然还包含了jasmine-core目录):
DSC0006.png


开启Karma:
  输入命令:



karma start
  图8(运行后如图所示出现了一行INFO信息,并没有其他提示和动作,因为此时我们没有配置karma的启动参数。后面会加入karma.conf.js,这样karma就会自动启动浏览器并执行测试用例了):
DSC0007.png

  图9(手动打开Chrome,输入localhost:9876,如果看到这个页面,证明已经安装成功):
DSC0008.png


Karma+Jasmine配置:
  执行命令init命令进行配置:



karma init
  图10(所有默认配置问题):
DSC0009.png

  说明:
  1. 测试框架:我们当然选jasmine
  2. 是否添加Require.js插件
  3. 选择浏览器: 我们选Chrome
  4. 测试文件路径设置,文件可以使用通配符匹配,比如*.js匹配指定目录下所有的js文件(实际操作中发现该路径是karma.conf.js文件的相对路径,详见下面我给出的实际测试配置及说明)
  5. 在测试文件路径下,需要排除的文件
  6. 是否允许Karma监测文件,yes表示当测试路径下的文件变化时,Karma会自动测试
  我在虚拟机上测试的例子:
  图11(TestFiles和NodeJS处于E盘根目录下,karma.conf.js处于文件夹NodeJS的根目录下):
DSC00010.png

  以下是karma.conf.js的完整内容:



1 // Karma configuration
2 // Generated on Fri May 29 2015 19:30:26 GMT+0800 (中国标准时间)
3
4 module.exports = function(config) {
5   config.set({
6
7     // base path that will be used to resolve all patterns (eg. files, exclude)
8     basePath: '../TestFiles',
9
10
11     // frameworks to use
12     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
13     frameworks: ['jasmine'],
14
15
16     // list of files / patterns to load in the browser
17     files: [
18       '*.js'
19     ],
20
21
22     // list of files to exclude
23     exclude: [
24     ],
25
26
27     // preprocess matching files before serving them to the browser
28     // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
29     preprocessors: {
30     },
31
32
33     // test results reporter to use
34     // possible values: 'dots', 'progress'
35     // available reporters: https://npmjs.org/browse/keyword/karma-reporter
36     reporters: ['progress'],
37
38
39     // web server port
40     port: 9876,
41
42
43     // enable / disable colors in the output (reporters and logs)
44     colors: true,
45
46
47     // level of logging
48     // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
49     logLevel: config.LOG_INFO,
50
51
52     // enable / disable watching file and executing tests whenever any file changes
53     autoWatch: true,
54
55
56     // start these browsers
57     // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
58     browsers: ['Chrome'],
59
60
61     // Continuous Integration mode
62     // if true, Karma captures browsers, runs the tests and exits
63     singleRun: false
64   });
65 };
  说明:
  若所有测试文件均处于同一个目录下,我们可以设置basePath(也是相对于karma.conf.js文件的相对路径),然后指定files,此时files则为basePath目录下的文件相对路径;
  当然你也可以不设置basePath,直接使用相对于karma.conf.js文件的文件相对路径,如本例中,我们若保持basePath默认为空,则files配置应为:



files: [
'../TestFiles/jasmineTest.js',
'../TestFiles/test.js'
]
  test.js内容:



function TT() {
return "abc";
}
  jasmineTest.js内容:



describe("A suite of basic functions", function () {
it("test", function () {
expect("abc").toEqual(TT());
});
});
  启动Karma:



karma start karma.conf.js
  由于这次加上了配置文件karma.conf.js,因此Karma会按照配置文件中指定的参数执行操作了,由于我们配置的是在Chrome中测试,因此Karma会自动启动Chrome实例,并运行测试用例:
  图12(左侧的Chrome是Karma自动启动的,右侧的Node.js command prompt窗口中,最后一行显示了执行结果):
DSC00011.png

  图13(如果我们点击图12中的debug按钮,进入debug.html并按F12打开开发者工具,选择Console窗口,我们将能看到jasmine的执行日志):
DSC00012.png

  若此时,我们将jasmineTest.js中对于调用TT方法的期望值改为"abcd"(实际为"abc"):



describe("A suite of basic functions", function () {
it("test", function () {
expect("abcd").toEqual(TT());
});
});
  由于我们在karma.conf.js中设置了autoWatch为true:



autoWatch: true
  Karma将自动执行测试用例,由于本例测试用例未通过,因此在屏幕上打印出了错误信息,Chrome的Console窗口中的日志信息需要刷新debug.html后显示。
  图14(Karma自动检测到文件变化并自动重新执行了测试用例):
DSC00013.png


代码覆盖率:
  如果你还想查看测试的代码覆盖率,我们可以安装karma-coverage插件,安装命令为:



npm install karma-coverage
  图15(安装karma-coverage的过程):
DSC00014.png

  修改karma.conf.js,增加覆盖率的配置:
  图16(主要是变动了以下三个配置节点,其他的配置内容不变):



1     // preprocess matching files before serving them to the browser
2     // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
3     preprocessors: {
4         '../TestFiles/test.js':'coverage'
5     },
6
7
8     // test results reporter to use
9     // possible values: 'dots', 'progress'
10     // available reporters: https://npmjs.org/browse/keyword/karma-reporter
11     reporters: ['progress','coverage'],
12     
13     coverageReporter:{
14         type:'html',
15         dir:'../TestFiles/coverage/'
16     },
  变动如下:


  • 在reporters中增加coverage
  • preprocessors中指定js文件
  • 添加coverageReporter节点,将覆盖率报告类型type设置为html,输入目录dir指定到你希望的目录中
  此时完整的karma.conf.js如下:


DSC00015.gif DSC00016.gif


1 // Karma configuration
2 // Generated on Fri May 29 2015 19:30:26 GMT+0800 (中国标准时间)
3
4 module.exports = function(config) {
5   config.set({
6
7     // base path that will be used to resolve all patterns (eg. files, exclude)
8     basePath: '',
9
10
11     // frameworks to use
12     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
13     frameworks: ['jasmine'],
14
15
16     // list of files / patterns to load in the browser
17     files: [
18       '../TestFiles/jasmineTest.js',
19       '../TestFiles/test.js'
20     ],
21
22
23     // list of files to exclude
24     exclude: [
25     ],
26
27
28     // preprocess matching files before serving them to the browser
29     // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
30     preprocessors: {
31         '../TestFiles/test.js':'coverage'
32     },
33
34
35     // test results reporter to use
36     // possible values: 'dots', 'progress'
37     // available reporters: https://npmjs.org/browse/keyword/karma-reporter
38     reporters: ['progress','coverage'],
39     
40     coverageReporter:{
41         type:'html',
42         dir:'../TestFiles/coverage/'
43     },
44
45
46     // web server port
47     port: 9876,
48
49
50     // enable / disable colors in the output (reporters and logs)
51     colors: true,
52
53
54     // level of logging
55     // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
56     logLevel: config.LOG_INFO,
57
58
59     // enable / disable watching file and executing tests whenever any file changes
60     autoWatch: true,
61
62
63     // start these browsers
64     // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
65     browsers: ['Chrome'],
66
67
68     // Continuous Integration mode
69     // if true, Karma captures browsers, runs the tests and exits
70     singleRun: false
71   });
72 };
View Code  执行命令:



karma start karma.conf.js
  图17(执行命令后,在配置文件coverageReporter节点中指定的dir中,我们将找到生成的覆盖率报告,karma-coverage还生成了一层子文件夹,对应于执行测试的浏览器+版本号+操作系统版本):
DSC00017.png


参考资料:
  Karma-runner:http://karma-runner.github.io/0.12/index.html
  Karma-runner安装步骤:https://karma-runner.github.io/0.12/intro/installation.html
  Karma config file: http://karma-runner.github.io/0.8/config/configuration-file.html
  Karma files:http://karma-runner.github.io/0.8/config/files.html
  Karma和Jasmin自动化单元测试:http://blog.fens.me/nodejs-karma-jasmine/
  AngularJS的UnitTest:https://docs.angularjs.org/guide/unit-testing

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346115-1-1.html 上篇帖子: Node稳定性的研究心得 下篇帖子: 在Ubuntu下搭建ASP.NET 5开发环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表