JavaScript单元测试的“抹茶”组合:Mocha和Chai
mocha
是一个javascript的测试框架,chai
是一个断言库,两者搭配使用更佳,所以合称“抹茶”(其实mocha
是咖啡)。“抹茶”特点是: 简单,node
和浏览器都可运行。
BDD
:Behavior Driven Development,行为驱动开发,注重测试逻辑TDD
:Test-Driven Development,测试驱动开发,注重输出结果
Mocha
Mocha
是一个功能丰富的JavaScript测试框架,可以运行在 node 和浏览器上,使异步测试变得简单而有趣。Mocha
在运行测试用例过程中,当捕获到错误时,依旧能够灵活地运行精确的报告。mocha
默认的模式是 BDD
。
在 Node.js
中,目前比较流行的单元测试组合是 mocha + chai
。mocha
是一个测试框架,chai
是一个断言库,所以合称”抹茶”。
安装
npm install --g mocha
运行
//mocha [debug] [options] [files] mocha --recursive test
基本方法
Mocha 有三个基本方法:
- describe(moduleName, function)
describe 是可嵌套的,描述测试用例是否正确。
describe('测试模块的描述', function() { // .... });
- it(info, function)
info为描述性说明。一个it对应一个单元测试用例。
describe('单元测试的描述,一般写明用途和返回值', function() { // .... });
- assert.equal(exp1, exp2)
mocha
的断言语句,判断 exp1
是否等于 exp2
。
异步代码测试
- done
一个 it
里面只有一个 done
。
done
标识回调的最深处,也是嵌套回调函数的末端。
describe('User', function() { describe('#save()', function() { it('should save without error', function(done) { var user = new User('Luna'); user.save(done); }); }); });
Test Hooks方法
before()
、after()
、beforeEach()
、afterEach()
是基于 BDD
风格提出的,用于预处理和 test
后的处理。
Test Hooks
方法的几个注意点:
beforeEach
会对当前describe
下的所有子case
生效;before
和after
的代码没有特殊顺序要求;- 同一个
describe
下的执行顺序为before
、beforeEach
、afterEach
、after
; - 当一个
it
有多个before
的时候,执行顺序是从最外围的describe
的before
开始,其他同理。
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 cases });
Hooks
的三种写法:
beforeEach(function() { }); beforeEach(function nameFun() { }); beforeEach("some description", function() { });
only()、skip()函数
describe
块和 it
块都允许调用 only()
和 skip()
方法。
only()
方法表示在当前的父 describe
块下,只执行该单元的测试。
skip()
方法表示在当前的父 describe
块下,跳过不执行该单元的测试。
当在一个 describe
块下,同时存在 only()
和 skip()
方法,则只执行 .only()
方法。
describe('Array', function() { describe.only('父describe块下只执行该测试单元', () => { it.skip('跳过的测试单元', () => { //... }); }); describe('不执行', () => { //... }); });
常用命令参数
--recursive
遍历子目录下的全部文件
Mocha 默认运行 /test
子目录里面的测试脚本。
Mocha默认只执行 /test
子目录下第一层的测试用例。
所以,应加上– recursive
参数,使全部子目录下的测试用例都能被执行。
mocha --recursive
-u tdd
执行 TDD
模式
mocha默认的模式是 BDD
,要想执行 TDD
的 test
时需要加上参数,如:
mocha -u tdd test.js
--watch, -w
监听脚本变化
--watch
参数用来监视指定的测试脚本。当脚本发生变化,就会自动运行mocha。
mocha --watch
--bail, -b
参数指定只要有一个测试用例没有通过,就停止执行后面的测试用例。这对持续集成很有用。
mocha --bail
-timeout, -t
指定超时门槛
Mocha默认每个测试用例最多执行2000毫秒。如果2000毫秒后还没有执行完成,则报错。-t
可执行超时门槛。
mocha -t 5000 test.js
Chai断言库
Chai
是一个BDD/TDD
模式的大而全的断言库,可以在node和浏览器环境运行,可以高效的和任何js测试框架搭配使用。
安装
npm install -g chai
覆盖率
既然是给功能代码写单元测试,那就应该有个指标去衡量单元测试覆盖了哪些功能代码,这就是接下来要介绍的测试覆盖率。
在 Node.js
中,我们使用 istanbul
作为覆盖率统计的工具,istanbul
可以帮助我们统计到代码的语句覆盖率、分支覆盖率、函数覆盖率以及行覆盖率,生成的报告如下:
istanbul cover error.js

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于AOP和HashMap原理学习,开发Mysql分库分表路由组件!
作者:小傅哥 博客:https://bugstack.cn >沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言 什么?Java 面试就像造火箭🚀 单纯了! 以前我也一直想 Java 面试就好好面试呗,嘎哈么总考一些工作中也用不到的玩意,会用 Spring、MyBatis、Dubbo、MQ,把业务需求实现了不就行了! 但当工作几年后,需要提升自己(要加钱)的时候,竟然开始觉得自己只是一个调用 API 攒接口的工具人。没有知识宽度,没有技术纵深,也想不出来更没有意识,把日常开发的业务代码中通用的共性逻辑提炼出来,开发成公用的组件,更没有去思考日常使用的一些组件是用什么技术实现的。 所以有时候你说面试好像就是在造火箭,这些技术日常根本用不到,其实很多时候不是这个技术用不到,而是因为你没用(嗯,以前我也没用)。当你有这个想法想突破自己的薪资待遇瓶颈时,就需要去了解了解必备的数据结构、学习学习Java的算法逻辑、熟悉熟悉通用的设计模式、再结合像 Spring、ORM、RPC,这样的源码实现逻辑,把相应的技术方案赋能到自己的日常业务开发中,把共性的问题用聚焦和提炼的方式进行解决,...
- 下一篇
OceanBase源码解读(二):SQL的一生
竹翁,OceanBase 内核研发总监 杨志丰,花名竹翁,毕业于北京大学,长期从事分布式系统和数据库的研发工作,现于阿里巴巴/蚂蚁金服自主研发的分布式关系数据库 OceanBase 团队负责研发工作,致力于把设计先进的 HTAP 数据库系统打造成技术业内标杆的核心基础设施。在 OceanBase 系统中,他先后负责研究 OceanBase 的 SQL 引擎、分布式主控模块、多模数据库方向以及 OceanBase 的数据库平台产品研发,并于近期开始负责内核创新研发工作。竹翁对 C++、分布式系统原理、SQL 查询处理、事务处理、编译技术、工程效率等方面具有深入的理解。 引言 源码是OceanBase的“方向盘”,本系列主要围绕“源码解读”,通过文章阐述,帮助大家理清数据库的内在本质。带你读源码第一篇《戳这里回顾:OceanBase数据库源码解读之模块结构》为大家介绍了OceanBase数据库的整体架构,旨在帮助大家快速厘清OceanBase的模块构成以及各模块的功能。 本文为 OceanBase 数据库源码解读系列文章的第二篇,将主要为大家介绍 OceanBase 数据库中一条 SQL ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程