博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mocha: step by step
阅读量:6714 次
发布时间:2019-06-25

本文共 3604 字,大约阅读时间需要 12 分钟。

hot3.png

如何从0开始?

当然先从mocha的官网开始, 只需要照搬即可 https://mochajs.org/#getting-started

$ yarn add mocha --dev // 或 npm install mocha --save-dev$ mkdir test$ $EDITOR test/test.js # or open with your favorite editor

 

test.js

var assert = require('assert');describe('Array', function() {  describe('#indexOf()', function() {    it('should return -1 when the value is not present', function() {      assert.equal(-1, [1,2,3].indexOf(4));    });  });});

 

运行结果:

$ ./node_modules/mocha/bin/mocha  Array    #indexOf()      ✓ should return -1 when the value is not present  1 passing (9ms)

 

test命令配置到package.json中更简便:

"scripts": {    "test": "mocha"  }

 

运行

yarn run test  // 或 npm run test

 

???,到这里,mocha的入门算是完成了!

 

想使用不同的断言库,比如chai怎么办呢?

安装chai

yarn add chai --dev

 

chai有三种风格,assert, expect 和should,后两种是BDD(Behavior Driven Development),根据个人喜好选择,个人比较喜欢expect和should, 有点类似Promise

首先,新建src、test两个目录,src下放源码,test是测试文件目录

源文件 src/sum.js

function sum (one, two) {  if (typeof one !== 'number' || typeof two !== 'number') {    throw new Error('error, not a number input')  }  return +one + +two}export default sum

 

测试文件 test/sum.test.js

import {expect} from 'chai'import sum from '../src/sum'describe('sum', function () {  it('should return 3 when the 1 add 2', function () {    expect(sum(1, 2)).to.equal(3)  })  it('should throw Error when only input 1', function () {    expect(function () {      sum(1)    }).to.throw(/error/)  })  it('should throw Error when input m', function () {    expect(function () {      sum('m')    }).to.throw(/error/)  })  it('should return 3 when 1 add 2 add 3', function () {    expect(sum(1, 2, 3)).to.equal(3)  })})

 

这里使用了import, es6的语法,所以需要引入babel帮助转换成es5

pacakge.json

"devDependencies": {    "babel-cli": "^6.24.1",    "babel-polyfill": "^6.23.0",    "babel-preset-env": "^1.5.1",    "babel-register": "^6.24.1",    "chai": "^3.5.0"    "mocha": "^3.4.2"  }

 

新建.babelrc 文件

{  "presets": ["env"]}

 

运行 yarn run test 会报错, 说是'import' 是 unexpected token 

150957_Ck0d_2510955.png

因为测试代码使用了es6的语法,所以运行mocha的时候也需要配置一下

参考babel installation: http://babeljs.io/docs/setup/#installation

package.json

"scripts": {    "test": "mocha --require babel-polyfill --compilers js:babel-register"  },

这样,再次运行测试就通过了

 

???, 哈哈,已经会使用mocha+chai进行单元测试啦

 

 

听过代码覆盖率,我也想用它看看我的测试代码,写的咋样

当然么有问题,这里介绍一个常用的检测代码覆盖率的库istanbul

要引入他,也是非常的简单

yarn add nyc --save

 

package.json

"scripts": {    "test": "nyc mocha --require babel-polyfill --compilers js:babel-register"  },

 

152353_LlAz_2510955.png

 

 

test的配置太丑了,能好看点吗?

当然可以,分三步走

第一步:安装cross-env啊,赤裸裸的广告~~??

yarn add cross-env --dev

 

第二步:安装babel-plugin-istanbul ,专门对付es6的 ???

yarn add babel-plugin-istanbul --dev

非常的注意,如果安装了istanbul, 一定要删掉,否则两个库会打架,结果是两败俱伤哦?

165352_bAng_2510955.png

 

第三步:改造配置项

.babelrc

{  "env": {    "test": {      "presets": ["env"],      "plugins": ["istanbul"]    }  },  "presets": ["env"]}

 

.pacakge.json

{  "name": "mochaLearn",  "version": "1.0.0",  "main": "index.js",  "license": "MIT",  "devDependencies": {    "babel-cli": "^6.24.1",    "babel-plugin-istanbul": "^4.1.3",    "babel-polyfill": "^6.23.0",    "babel-preset-env": "^1.5.1",    "babel-register": "^6.24.1",    "chai": "^3.5.0",    "cross-env": "^5.0.0",    "mocha": "^3.4.2",    "nyc": "^10.3.2"  },  "nyc": {    "require": [      "babel-polyfill",      "babel-register"    ]  },  "scripts": {    "test": "cross-env BABEL_ENV=test nyc mocha"  }}

 

运行结果:

165553_7x6g_2510955.png

 

依旧是美美滴~~???

 

完整的代码在这里:https://git.oschina.net/pea/mocha-learn.git

 

参考资料:

https://mochajs.org/#getting-started

http://chaijs.com/guide/

http://babeljs.io/docs/setup/#installation

https://github.com/kentcdodds/cross-env

https://github.com/istanbuljs/nyc

https://github.com/istanbuljs/babel-plugin-istanbul

 

 

转载于:https://my.oschina.net/u/2510955/blog/909776

你可能感兴趣的文章
想开发 Android 分支?没门!
查看>>
《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 2.2 相关关键技术及工作原理...
查看>>
《Nmap渗透测试指南》—第1章1.5节Mac OS安
查看>>
重磅,企业实施大数据的路径
查看>>
linux之cp/scp命令+scp命令详解
查看>>
Spark 源码分析 -- BlockStore
查看>>
《C语言编程初学者指南》一1.7 创建并运行第一个C程序
查看>>
学习和使用 PHP 应该注意的10件事
查看>>
《Ember.js实战》——2.5 Ember.js对象模型
查看>>
《响应式Web图形设计》一第13章 响应Web设计中的图像
查看>>
shiro session 监听
查看>>
定时任务框架Quartz的新玩法
查看>>
段前缀的使用(0504)
查看>>
.NET Framework 源码
查看>>
开源大数据周刊-第6期
查看>>
centos上一键安装jdk、tomcat脚本
查看>>
排序算法 时间、空间复杂度
查看>>
心痛的感觉
查看>>
class - function ES6类的方法的两种定义方式及调用方式
查看>>
flex容器主轴上的部分元素单独设置位置
查看>>