一.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. Python 单词翻译:中英文翻译模块
  2. 趣谈网络协议笔记-二(第五讲)
  3. MySQL 中 AUTO_INCREMENT 的“坑” --重复值问题
  4. mysql sum很慢,可以在MySQL中加快sum()吗?
  5. 技术博客么?开始每天一更
  6. 新的恶意软件将后门植入微软 SQL Server 中
  7. 巧用DBGrid控件的Sort属性实现“点击标题栏自动排序功能”。(改进版本)
  8. axure中怎么把图片变圆_怎么将图片中的文字提取出来?收下这份识别教程
  9. 研究表明:学生经常登录Facebook 课程不及格的概率上升(意译)
  10. openstack网络服务neutron (控制节点)
  11. HG221GS光猫超级密码破解(烽火,华为)
  12. flash 调试版本
  13. 全纯函数导数的几何意义
  14. 拿什么拯救你的硬盘?十大绝招帮你忙
  15. CSS3各个模块详解
  16. Linux 创建用户和添加操作权限
  17. Greenplum6 JDBC insert性能媲美MySQL
  18. 【智能优化算法】基于倭黑猩猩优化算法求解单目标优化问题附matlab代码
  19. 树莓派怎么安装中文输入法
  20. bi平台怎么选,一文详解

热门文章

  1. GATBX遗传算法工具箱函数及实例讲解
  2. windows环境下elasticsearch使用教程
  3. 美食家(2)- 家常红烧肉制作方法
  4. matlab stem 属性,matlab中stem函数用法_常见问题解析
  5. [Shell]尚硅谷大数据技术之Shell--笔记(1)
  6. 浪潮8465m4安装linux,NF8465M4 – IPMI设置
  7. 指向的驱动器或网络连接不可用
  8. EPS在倾斜摄影“房地一体”项目中的应用及操作简介
  9. 数据结构__图书管理系统(C语言)
  10. 与IT相关的英文缩写