一.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测试文件的基本写法:

一个测试文件的内容主要写法有三部分:

  1. describe(groupName, callback)测试分组describe可以多层嵌套使用
  2. it('testItemName', callback)测试项
    • 注意:

      • 测试同步函数时,callback内无需传入参数
      • 测试异步函数时,callback内需要传入一个参数,通常命名为done
  3. 断言:对测试内容的判断,断言是否满足
    • 默认使用的是Node.js的assert模块
    • 也可以自己选择其他的断言库:
      • 断言库列表:

        • should.jsshould语法风格BDD风格)的断言库
        • expect.jsexpect语法风格简约BDD风格)的断言库
        • chai:可自由在(assert()should()expect())三种风格进行选择的断言库
        • better-assert:~
        • unexpected: ~
      • 第三方断言库的使用方法:
        1. 方式1:在每个测试文件中都使用require引入断言库依赖,然后即可在当前的测试文件中使用了
        2. 方式2:在test/目录下添加一个mocha.opts配置文件,在里面写入要使用的断言库,之后即可在所有的测试文件中直接使用了,例如:
        // test/mocha.opts
        --require should
        复制代码

示例:

// 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)提供了如下几个钩子函数:

  1. before(fn)fn会在该组中的所有测试项被测试之前调用
  2. after(fn)fn会在该组中的所有测试项被测试之后调用
  3. beforeEach(fn)fn会在该组中每一个测试项被调用之前调用
  4. 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.异步测试:

  1. 有如下一个异步函数需要进行测试:
// 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
复制代码
  1. 对于异步函数的测试,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的使用总结相关推荐

  1. 前端测试 karma mocha should 都是什么鬼?

    测试TDD和BDD的区别 TDD是测试驱动开发,通过用测试用例来规范约束开发者,编写出质量更高的代码 BDD是行为驱动开发,描述行为路径,就像描述故事,产品和前线业务人员可参与到开发流程中,减轻测试和 ...

  2. 整合企业监控孤岛 Mocha BSM走进香港物流行业——香港空运货站有限公司

    · 案例背景   - HACTL(香港空运货站有限公司)拥有一个比较复杂的环境,用了很多不同品牌的设备和软件,单单监控软件就有数家,怎么去整合这些不同监控软件已经是一个很复杂的问题. - 在这一个项目 ...

  3. Mocha NTA基于单采集器实现的多种流协议分析

    业内主流的Flow协议技术         网络业界基于流(Flow)的分析技术主要有NetFlow.sFlow.cFlow和NetStreem四种.NetFlow是Cisco公司的独有技术,它既是一 ...

  4. Mocha BSM应用管理——Lotus Domino监控与管理

    业务需求与挑战 现在有很多企业利用Lotus Domino的平台,提供了以下几种不同业务服务:   •邮件服务   •企业网站   •办公自动化 (OA)   •协同办公 一旦这些业务服务中断,会给企 ...

  5. 摩卡业务服务管理(Mocha BSM)解决方案

    方案概述 企业IT系统越来越多,网络.设备和产品越来越复杂,业越来越依赖于稳定可靠的系统运行,公司内部和外部用户对IT部门的支持服务和协调管理也提出了更高的要求.可是我们的IT部门被大量的设备所困扰, ...

  6. Mocha BSM产品亮点——策略管理

    业务需求与挑战       企业即使已经使用了其他监控软件,在制定监控策略时,也经常会遇到下列场景: • 无法批量设置资源的监控策略. • 无法对同一资源的相同的组件采用不同的监控策略(设置不同的监控 ...

  7. Mocha+should+Karma自动化测试教程

    Mocha+should+Karma自动化测试教程 一.了解TDD与BDD 首先,为什么我们了解TDD与BDD的是什么意思? 在实际项目中,大部分都是采用BDD的形式进行开发,也就是行为驱动开发. T ...

  8. Mocha BSM 6.8成功发布

    摩卡业务服务管理 6.8(Mocha BSM)于2008-6-20日(周五)如期的进行了发布,本产品增加如下功能以及亮点: · 扩大了资源监控的范围 企业的设备应用是多种多样的,为了更好的对企业设备进 ...

  9. mocha 测试 mysql_mocha 的基本用法 istanbul 生成测试覆盖率报告 mockjs 模拟网络请求...

    补充: cnpm i mocha -g --save-dev cnpm i chai --save-dev //这个是可选的断言库,也可以用should cnpm i mochawesome --sa ...

  10. react项目中使用mocha结合chai断言库进行单元测试

    react项目中使用mocha结合chai断言库进行单元测试 git地址:https://github.com/yancekang/... 如果对你有所帮助,感谢start 项目搭建 create-r ...

最新文章

  1. WEB程序代码优化入手的几方面
  2. mysql免安装版鞋子_MySQL创建用户及授权
  3. java自定义配置文件_自定义配置文件如何配置
  4. 大数据实验报告总结体会_建设大数据中台架构思考与总结
  5. 架构实战项目心得(一):技术和工具
  6. SVN如何回滚到指定版本
  7. 去除趋势杀软的退出密码
  8. Android 9.0 蓝牙电话BluetoothHeadsetClient
  9. 微信公众号申请注意事项
  10. 上海居住证满3年或积分满120分房产税退税流程2014年
  11. core dump磁盘报警问题排查过程
  12. Win10深度学习环境配置(CUDA+cuDNN+TensorFlow-gpu+Keras)
  13. 使用HttpClient下载图片常用代码,以及下载失败原因
  14. 我开发过程中遇到的Echarts地图立体描边问题解决方式
  15. java中bean是什么_java中bean是什么意思?有什么作用 | 学步园
  16. [LnOI2019]东京夏日相会
  17. 配流02—DIAL算法(改进)
  18. 如何快速获取美拍视频
  19. 蓝牙最新版本6.0_连续看影视最新版本下载2021-连续看影视无广告不升级版v1.6.0 安卓版...
  20. python合并ts文件教程

热门文章

  1. nginx部署前端项目的详细步骤
  2. iPhone5S等A7设备 任意版本降级iOS10.3.3教程(方法一)
  3. AIX操作系统维护详解
  4. Java实现 蓝桥杯VIP 算法提高 聪明的美食家
  5. 完善网易云音乐。读取静态资源。实现用户登录以后,登录的内容转换成欢迎XXXX登录
  6. 分析mysql股票数据_股票数据分析(一)数据获取
  7. C语言编程练习,扫雷游戏
  8. android计算器开发报告总结,android简易计算器总结
  9. EBS功能_固定资产总结
  10. 金蝶K3案例教程固定资产前台操作