Node.js教程 基于Grunt&Mocha搭建Node.js自动化单元测试框架
沉沙 2018-10-09 来源 : 阅读 1337 评论 0

摘要:本篇教程介绍了Node.js教程 基于Grunt&Mocha搭建Node.js自动化单元测试框架,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

本篇教程介绍了Node.js教程 基于Grunt&Mocha搭建Node.js自动化单元测试框架,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

<

 Introduction
Grunt 是一个基于任务的JavaScript 世界的构建工具
Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异步测试更简单更有趣。Mocha 可以持续运行测试,支持灵活又准确的报告,当映射到未捕获异常时转到正确的测试示例。
 
Prerequisite
nodejs项目文件目录结构如下

├── config
├── controllers
├── models
├── lib
├── node_modules
├── test
├── tasks
│   ├── mochacli.js
│   ├── sonarRunner.js
│   └── mocha_istanbul.js    
│── package.json
└── Gruntfile.js
        

test 文件夹存放所有的单元测试*.js 文件
tasks 文件夹放的是一些给grunt 执行的task 文件
package.json 里用到的依赖如下

"devDependencies": {
    "chai": "^3.0.0",
    "chai-as-promised": "^5.1.0",
    "grunt": "^0.4.1",
    "grunt-config-dir": "^0.3.2",
    "grunt-mocha-cli": "^1.5.0",
    "grunt-mocha-istanbul": "^2.4.0",
    "grunt-sonar-runner": "^2.4.3",
    "istanbul": "^0.3.14",
    "load-grunt-tasks": "~0.2",
    "mocha": "^1.18.0",
    "sinon": "^1.15.4",
    "supertest": "^0.9.0"
  }

这些包的安装都是通过命令 npm install xxx --save-dev 
 
Grunt task
Gruntfile.js 配置如下

‘use strict‘;

module.exports = function (grunt) {

    // Load the project‘s grunt tasks from a directory
    require(‘grunt-config-dir‘)(grunt, {
        configDir: require(‘path‘).resolve(‘tasks‘)
    });

    // Register tasks
    grunt.registerTask(‘test‘, [ ‘mochacli‘ ]);
    grunt.registerTask(‘coverage‘, [ ‘mocha_istanbul:coverage‘,‘sonarRunner:analysis‘]);
};

 
Task - ‘mochacli‘ 如下

‘use strict‘;

module.exports = function mochacli(grunt) {
    // Load task
    grunt.loadNpmTasks(‘grunt-mocha-cli‘);

    // Options
    return {
        src: [‘test/**/*.js‘],
        options: {
            timeout: 6000,
            ‘check-leaks‘: true,
            ui: ‘bdd‘,
            reporter: ‘spec‘
        }
    };
};

用这个插件来运行Mocha的测试。
 
Task - ‘mocha_istanbul‘ 如下

‘use strict‘;

module.exports = function clean(grunt) {
    // Load task
    grunt.loadNpmTasks(‘grunt-mocha-istanbul‘);

    // Options
    return {
            coverage: {
                src: ‘test‘, // a folder works nicely
                options: {
                    coverage: true,
                    reportFormats: [‘lcov‘,‘lcovonly‘],
                    root: ‘.‘,
                    recursive: true
                }
              }
  };
};

istanbul这个插件是用来计算代码覆盖率的,并且可以生成lcov格式的report, 以便与下一个插件sonarRunner集成,展示报告
 
Task - ‘sonarRunner.js‘ 如下

‘use strict‘;

module.exports = function clean(grunt) {
    // Load task
    grunt.loadNpmTasks(‘grunt-sonar-runner‘);

    // Options
    return {
      analysis: {
        options: {
          debug: true,
          separator: ‘\n‘,
          sonar: {
            host: {
              url: ‘//10.101.46.20:9000‘
            },
            jdbc: {
              url: ‘jdbc:mysql://10.101.46.20:3306/sonar‘,
              username: ‘sonar‘,
              password: ‘sonar‘
            },

            javascript: {
              lcov: {
                reportPath: ‘coverage/lcov.info‘
              }
            },

            projectKey: ‘Demo:0.1.0‘,
            projectName: ‘Demo project‘,
            projectVersion: ‘0.1.0‘,
            sources: [‘controllers‘,‘models‘,‘lib‘].join(‘,‘),
            language: ‘js‘,
            sourceEncoding: ‘UTF-8‘
          }
        }
      }
    };
};

 
运行grunt test 示例结果如下 (其实有很多用例,这里为了好展示图片,就run了一个)

 
运行grunt coverage 后
这里面两个task, 运行完第一个mocha_istanbul:coverage后, 根目录下会产生一个coverage目录

└──coverage
    ├── coverage.json
    ├── lcov.info
    └── lcov-report
        ├── index.html
        ├── xxx
        └── xxx

lcov.info格式的文件是给Sonnar展示报告用的
打开lcov-report/index.html 如下图

 
第二个插件是用来与Sonar集成的, 这几个grunt命令我是放在jenkins里daily build后执行的
不知道为何Sonar 解析出来的代码覆盖率数字 与 istanbul插件算出来的 差距很大。。

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程