幸福感爆棚的Node测试框架

最近软件测试课上需要我们介绍一个测试工具,因为我沉迷node,所以只好拿出这一套幸福感爆棚的测试框架了,Mocha & Chai。

Mocha

简介

Mocha是一个能够运行在Node和浏览器中的多功能的JavaScript测试框架。作为一个测试框架,最主要的工作是提供了丰富的测试报告模块帮助问题的分析定位,并且对断言模块进行了更方便的分类封装。所以Mocha是能够很轻松的调用selenium webdriver之类的测试工具的。

开始

describe('example 1', function () {
    it('1加1等于2', function () {
      expect(add(1, 1)).to.be.equal(3);
    })
  });

这里是一个很简单的小例子,是对加法进行单元测试。

describe测试套件,表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称,第二个参数是一个实际执行的函数。主要是用 describe 来对代码进行分块。在保留字中有它的同功能关键字 context

it测试用例,表示一个单独的测试,是测试的最小单元。在一个 describe 中可以包含多个 it 。并且如果 it 中包含多个断言,第一个断言出现错误时,后面的将不会执行。在保留字中有它的同功能关键字 specify

这里主要记录一些我觉得比较有意思的部分,对于Mocha的系统讲解就不赘述,有兴趣的可以看看Mocha.js官方文档翻译 —— 简单、灵活、有趣测试框架 Mocha 实例教程

测试状态

测试结果主要分为3种状态,成功、失败、挂起。这里主要说一下挂起,挂起有可能是因为没有传入回调函数的测试用例,即 it 中没有传入回调函数。还有一种可能是没有设置超时检查的超时函数,所以我们需要考虑超时测试。

超时测试可以在套件级设置,也可以在用例级设置和钩子级设置。

// 在套件级设置,只要用例级没有覆盖则整个套件有效
describe('example 1', function () {
   this.timeout(500);
   
   it('不超过500ms', function(done) {
       setTimeOut(done, 300);
   })
});

// 在用例级设置
describe('example 2', function () {
   it('不超过500ms', function(done) {
       this.timeout(500);
       setTimeOut(done, 300);
   })
})

// 在钩子级设置
describe('example 3', function () {
   beforeEach(function(done) {
       this.timeout(3000); 
       setTimeout(done, 2500)
   })
})

异步测试

因为是基于nodejs的框架,所以异步是在所难免的。但是同样可以promise来优雅的将异步处理为同步了。

const assert = require('assert')

it('应该结束这个测试用例', function (done) {
  return new Promise(function (resolve) {
    assert.ok(true)
    resolve()
  })
})

定制测试方案

在测试程序当中,可能会因为测试方案的改变,需要对某一些测试套件进行测试,而有一些套件不需要测试。这时候Mocha就提供了定制的功能。

  • 独占模式(describe.only / it.only):设置后仅会运行独占的测试套件或者用例。
  • 跳过测试(describe.skip / it.skip):设置后会跳过相应的测试套件或用例。
  • 重试测试(this.retries(4)):可以通过这种方法把失败的测试重新运行几次,设置方法与超时测试类似,可以在套件或者用例中设置。但是这个特性被设计用于资源(数据)不容易被仿造的端到端测试,不推荐单元测试

测试报告

测试报告是测试过程当中非常重要的产物。Mocha提供了很多有趣的测试报告,设置测试报告的方法是:

$ mocha test.js --reporter landing

--reporter 后面填写测试报告模板的名字,这里推荐一下landing和默认的SPEC,当然接下来要介绍的就是效果更好的网页测试报告。

首先需要安装 mochawesome,然后使用就行。

$ npm install --save mochawesome
$ mocha test.js --reporter mochawesome

会在该文档中新建mochawesome-reports文档,里面就是报告。

配置文件

通过配置文件,可以简化我们的命令。比如我们在mocha.opts中添加:

--reporter tap
--recursive
--growl

然后在运行 $ mocha ,就相当于我们运行:

$ mocha --recursive --reporter tap --growl

如果测试用例不是在当前目录,可以在配置文件前写文档名。

file
--reporter tap
--recursive
--growl

Chai

Mocha作为测试框架可以使用多种断言库,这里我选用了Chai。chai.js支持BDD风格的expect/should API以及TDD风格的Assert API。但是should断言是不支持IE的并且稳定性也没有expect好,所以更推荐使用expect断言。

对于API的解释可以查看Chai.js断言库API中文文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容