mocha的使用总结
一.mocha的安装和运行
1.安装:
# 1.可以全局安装
npm install -g mocha# 2.也可以在项目中安装
npm install -D mocha
复制代码
2.测试启动命令
- 使用如下的命令时,
mocha
会默认执行当前路径的test/
目录下的所有测试文件
# 1.若mocha是全局安装的
mocha# 2.若mocha是在项目中安装的
node_module\mocha\bin\mocha
复制代码
3.项目目录结构:
在项目下新建一个
test/
目录,为默认的测试文件存放位置
my_project/
—— hello.js // 含有待测试内容的文件
—— test/ // test/目录存放所有的测试文件
———— hello_test.js // 测试文件
———— ... // ...
—— package.json // 项目描述文件
—— node_modules/ // npm安装包
复制代码
二.mocha测试文件的基本写法:
一个测试文件的内容主要写法有三部分:
describe(groupName, callback)
:测试分组,describe
可以多层嵌套使用it('testItemName', callback)
:测试项- 注意:
- 测试同步函数时,
callback
内无需传入参数 - 测试异步函数时,
callback
内需要传入一个参数,通常命名为done
- 测试同步函数时,
- 注意:
断言
:对测试内容的判断,断言是否满足- 默认使用的是Node.js的
assert
模块 - 也可以自己选择其他的断言库:
- 断言库列表:
should.js
:should语法风格
(BDD
风格)的断言库expect.js
:expect语法风格
(简约BDD风格
)的断言库chai
:可自由在(assert()
、should()
、expect()
)三种风格进行选择的断言库better-assert
:~unexpected
: ~
- 第三方断言库的使用方法:
- 方式1:在每个测试文件中都使用
require
引入断言库依赖,然后即可在当前的测试文件中使用了 - 方式2:在
test/
目录下添加一个mocha.opts
配置文件,在里面写入要使用的断言库,之后即可在所有的测试文件中直接使用了,例如:
// test/mocha.opts --require should 复制代码
- 方式1:在每个测试文件中都使用
- 断言库列表:
- 默认使用的是Node.js的
示例:
// hello.js
module.exports = function (...rest) {var sum = 0;for (let n of rest) {sum += n;}return sum;
};
复制代码
// test/hello.test.js
const assert = require('assert');
const sum = require('../hello');describe('#hello.js', () => {describe('#sum()', () => {it('sum() should return 0', () => {assert.strictEqual(sum(), 0);});it('sum(1) should return 1', () => {assert.strictEqual(sum(1), 1);});it('sum(1, 2) should return 3', () => {assert.strictEqual(sum(1, 2), 3);});it('sum(1, 2, 3) should return 6', () => {assert.strictEqual(sum(1, 2, 3), 6);});})
})
复制代码
命令行输入mocha
开启测试,控制台输出如下的结果,说明编写的4个测试项全部通过了
#hello.js#sum()✓ sum() should return 0✓ sum(1) should return 1✓ sum(1, 2) should return 3✓ sum(1, 2, 3) should return 64 passing (7ms)
复制代码
三.mocha的高级用法:
1. mocha
为每个测试组(describe
)提供了如下几个钩子函数:
before(fn)
:fn
会在该组中的所有测试项被测试之前调用after(fn)
:fn
会在该组中的所有测试项被测试之后调用beforeEach(fn)
:fn
会在该组中每一个测试项被调用之前调用afterEach(fn)
:fn
会在该组中每一个测试项被调用之前调用
describe('hooks', function() {before(function() {// runs before all tests in this block});after(function() {// runs after all tests in this block});beforeEach(function() {// runs before each test in this block});afterEach(function() {// runs after each test in this block});// test casesit('测试项1', () => {...})it('测试项2', () => {...})
});
复制代码
2.异步测试:
- 有如下一个异步函数需要进行测试:
// async.js
const fs = require('fs');module.exports = async () => {let expression =await fs.readFile('./data.txt', 'utf-8');let fn = new Function('return ' + expression);let r = fn();console.log(`Calculate: ${expression} = ${r}`);return r;
}
复制代码
// data.txt
1 + (2 + 4) * (9 - 2) / 3
复制代码
- 对于异步函数的测试,
it(测试项名, callback(done) {...})
的callback
中需要传入一个done
参数- 若异步测试通过,则在
callback
内部手动调用done()
- 若异步测试不通过,则在
callback
内部手动调用done(err)
ps:针对不同写法的异步函数,其对应的测试写法也有所不同:
- 若异步测试通过,则在
// async-test.js
const assert = require('assert');
const hello = require('../hello.js');describe('#async hello', () => {describe('#asyncCalculate()', () => {// 1.如果待测试的异步函数是回调函数语法的,则必须在回调函数中来进行测试判断(写法麻烦) it('test async function', function(done) {fs.readFile('filepath', function (err, data) {if (err) {done(err);} else {done();}}); })// 2.如果待测试的异步函数是async/await 语法的,可通过try catch来测试判断(写法还是比较麻烦)it('#test async function', (done) => {(async function () {try {let r = await hello();assert.strictEqual(r, 15);done();} catch (err) {done(err);}})();});// 3.待测试的异步函数是async/await语法的,最简单的写法——把async函数当作同步函数来测试!!!it('test async function', async () => {let r = await hello();assert.strictEqual(r, 15);})})
})
复制代码
- 总结: 对于异步函数的测试,若异步函数是使用的
async\await
关键字,其在编写测试用例时很简单,基本跟同步函数的测试用例写法一样
转载于:https://juejin.im/post/5c8cec225188257c5b4787a9
mocha的使用总结相关推荐
- 前端测试 karma mocha should 都是什么鬼?
测试TDD和BDD的区别 TDD是测试驱动开发,通过用测试用例来规范约束开发者,编写出质量更高的代码 BDD是行为驱动开发,描述行为路径,就像描述故事,产品和前线业务人员可参与到开发流程中,减轻测试和 ...
- 整合企业监控孤岛 Mocha BSM走进香港物流行业——香港空运货站有限公司
· 案例背景 - HACTL(香港空运货站有限公司)拥有一个比较复杂的环境,用了很多不同品牌的设备和软件,单单监控软件就有数家,怎么去整合这些不同监控软件已经是一个很复杂的问题. - 在这一个项目 ...
- Mocha NTA基于单采集器实现的多种流协议分析
业内主流的Flow协议技术 网络业界基于流(Flow)的分析技术主要有NetFlow.sFlow.cFlow和NetStreem四种.NetFlow是Cisco公司的独有技术,它既是一 ...
- Mocha BSM应用管理——Lotus Domino监控与管理
业务需求与挑战 现在有很多企业利用Lotus Domino的平台,提供了以下几种不同业务服务: •邮件服务 •企业网站 •办公自动化 (OA) •协同办公 一旦这些业务服务中断,会给企 ...
- 摩卡业务服务管理(Mocha BSM)解决方案
方案概述 企业IT系统越来越多,网络.设备和产品越来越复杂,业越来越依赖于稳定可靠的系统运行,公司内部和外部用户对IT部门的支持服务和协调管理也提出了更高的要求.可是我们的IT部门被大量的设备所困扰, ...
- Mocha BSM产品亮点——策略管理
业务需求与挑战 企业即使已经使用了其他监控软件,在制定监控策略时,也经常会遇到下列场景: • 无法批量设置资源的监控策略. • 无法对同一资源的相同的组件采用不同的监控策略(设置不同的监控 ...
- Mocha+should+Karma自动化测试教程
Mocha+should+Karma自动化测试教程 一.了解TDD与BDD 首先,为什么我们了解TDD与BDD的是什么意思? 在实际项目中,大部分都是采用BDD的形式进行开发,也就是行为驱动开发. T ...
- Mocha BSM 6.8成功发布
摩卡业务服务管理 6.8(Mocha BSM)于2008-6-20日(周五)如期的进行了发布,本产品增加如下功能以及亮点: · 扩大了资源监控的范围 企业的设备应用是多种多样的,为了更好的对企业设备进 ...
- mocha 测试 mysql_mocha 的基本用法 istanbul 生成测试覆盖率报告 mockjs 模拟网络请求...
补充: cnpm i mocha -g --save-dev cnpm i chai --save-dev //这个是可选的断言库,也可以用should cnpm i mochawesome --sa ...
- react项目中使用mocha结合chai断言库进行单元测试
react项目中使用mocha结合chai断言库进行单元测试 git地址:https://github.com/yancekang/... 如果对你有所帮助,感谢start 项目搭建 create-r ...
最新文章
- WEB程序代码优化入手的几方面
- mysql免安装版鞋子_MySQL创建用户及授权
- java自定义配置文件_自定义配置文件如何配置
- 大数据实验报告总结体会_建设大数据中台架构思考与总结
- 架构实战项目心得(一):技术和工具
- SVN如何回滚到指定版本
- 去除趋势杀软的退出密码
- Android 9.0 蓝牙电话BluetoothHeadsetClient
- 微信公众号申请注意事项
- 上海居住证满3年或积分满120分房产税退税流程2014年
- core dump磁盘报警问题排查过程
- Win10深度学习环境配置(CUDA+cuDNN+TensorFlow-gpu+Keras)
- 使用HttpClient下载图片常用代码,以及下载失败原因
- 我开发过程中遇到的Echarts地图立体描边问题解决方式
- java中bean是什么_java中bean是什么意思?有什么作用 | 学步园
- [LnOI2019]东京夏日相会
- 配流02—DIAL算法(改进)
- 如何快速获取美拍视频
- 蓝牙最新版本6.0_连续看影视最新版本下载2021-连续看影视无广告不升级版v1.6.0 安卓版...
- python合并ts文件教程