测试利器Mocha

介绍

mocha 是一个功能丰富的javascript测试框架,可以运行在nodejs和浏览器环境,使异步测试变得简单有趣。mocha 串联运行测试,允许灵活和精确地报告结果,同时映射未捕获的异常用来纠正测试用例。

支持TDD/BDD 的 开发方式,结合 should.js/expect/chai/better-assert 断言库,能轻松构建各种风格的测试用例。

特点

  • 简单
  • 灵活
  • 有趣

安装

通过npm全局安装:

npm install -g mocha

第一个测试用例

我们首先来见识一下mocha最基本的测试用例是怎么的结构,如下:

测试用例:

//模块依赖
var assert = require("assert");
 
//断言条件
describe('Array', function(){
  describe('#indexOf()', function(){
    it('当值不存在时应该返回 -1', function(){
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    });
  });
});

示例解析: 测试用例首先需要引用断言模块,如上文中var assert = require('assert');,代码 assert.equal(-1, [1,2,3].indexOf(5)); 中使用的是assert.equal(actual, expected, [message]) 语法。作用等同于使用'=='进行相等判断。actual为实际值,expected 为期望值。message为返回的信息。

运行

Mocha:$ mocha

断言

断言(assert)指的是对代码行为的预期。一个测试用例内部,包含一个或多个断言(assert)。

断言会返回一个布尔值,表示代码行为是否符合预期。测试用例之中,只要有一个断言为false,这个测试用例就会失败,只有所有断言都为true,测试用例才会通过。

比如上节示例中的:

assert.equal(-1, [1,2,3].indexOf(5));

assert.equal(-1, [1,2,3].indexOf(0));

实际值(-1)和期望值([1,2,3].indexOf(5))是一样的,断言为true,所以这个测试用例成功了。

mocha 允许开发者使用任意的断言库,当这些断言库抛出了一个错误异常时,mocha将会捕获并进行相应处理。这意味着你可以利用如 should.js断言库、 Node.js 常规的 assert 模块或其它类似的断言代码库。以下是众所周知的适用于Node.js或浏览器的断言库:

  • should.js
  • expect.js
  • chai.js
  • better-assert
  • assert:nodejs 原生模块,在前文示例中我们有应用到。

断言库

Chai 是一个非常灵活的断言库,它可以让你使用如下三种主要断言方式的任何一种:

  • assert:

这是来自老派测试驱动开发的经典的assert方式。比如:

assert.equal(variable, "value");
  • expect:

这种链式的断言方式在行为驱动开发中最为常见。比如:

expect(variable).to.equal("value");
  • should:

这也是在测试驱动开发中比较常用的方式之一。举例:

variable.should.equal("value");

expect 的语法

expect 库应用是非常广泛的,它拥有很好的链式结构和仿自然语言的方法。通常写同一个断言会有几个方法,比如expect(response).to.be(true) 和 expect(response).equal(true)。以下列举了 expect 常用的主要方法:

  • ok :检查是否为真
  • true:检查对象是否为真
  • to.be、to:作为连接两个方法的链式方法
  • not:链接一个否定的断言,如 expect(false).not.to.be(true)
  • a/an:检查类型(也适用于数组类型)
  • include/contain:检查数组或字符串是否包含某个元素
  • below/above:检查是否大于或者小于某个限定值

在课程开始讲解什么是mocha的时说:mocha支持TDD/BDD 的 开发方式,结合 should.js、expect、chai、better-assert 断言库,能轻松构建各种风格的测试用例。这里面有两个知识点,一个是断言库,另一个是 TDD/BDD 。

更多的内容和示例、练习请参考: http://www.hubwiz.com/course/562085141bc20c980538e25a/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杂烩

duubo分组聚合 原

除了官网上有这部分的简单介绍外,在别的地方几乎找到真正可行的测试了,这里自己捣鼓一下,已做备忘。

781
来自专栏java一日一条

8种常见的Java不规范代码

在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现的不规范代码。所以,我把它们整理成了一个列表出来分享给我的同行希望能引起注...

1233
来自专栏技术栈大杂烩

Python: 受限制的 "函数调用"

函数功能简单明了, 对于结果, 大家应该也不会有太大的异议:func分别是取得全局命名空间中a的值和使用内置命名空间中的函数id获取了a的地址. 熟悉Pytho...

1543
来自专栏猿人谷

C++内存管理学习堆和栈

一 C++内存管理 1.内存分配方式   在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。 1.1 C语言和C++内存分...

3646
来自专栏前端杂货铺

深入node之Transform

Transform流特性 在开发中直接接触Transform流的情况不是很多,往往是使用相对成熟的模块或者封装的API来完成流的处理,最为特殊的莫过于throu...

3145
来自专栏技术博文

js中判断浏览器版本

var ai = { ovb: { /** * 该对象用于判断系统,系统版本,浏览器,...

5105
来自专栏web前端教室

复习知识点 -- JS高效拼接字符串

image.png JS拼接字符串,一种是用变量 += ,另一种是用 join。这个办法我早就知道,但一直用的不是很熟练,今天就复习一下。 第一是js的字符...

30810
来自专栏十月梦想

ES6语法基础之let用法

简单讲解一些ES6语法基础!了解一些es6新特性!当然下一步需要学习的vue框架也是基于es6的,因此很有必要学习下es6语法,接下来几次简单讲解es6语法!

1003
来自专栏冰霜之地

高效的数据压缩编码方式 Protobuf

Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。

2931
来自专栏Java后端技术栈

Spring AOP中JDK和CGLib动态代理哪个更快?

昨天一位知识星球的小伙伴面试的时候被问到:Spring AOP中JDK和CGLib动态代理哪个效率更高?在知识星球整理了一下,今天特分享出来,供大家参考!

1111

扫码关注云+社区

领取腾讯云代金券