Node.js 使用强大的断言库 power-assert 进行单体测试

power-assert

  之前开发Node.js的项目时,一直都是使用mocha测试框架结合断言库(如should.jschaiexpect.js等)进行BDD单体测试的。但是这些断言库都有很多自己的APIs方法,需要花大量的时间去学习,而且这些断言库没有详细的描述性信息,抛出的错误都是类似于这种信息:AssertionError true == false,除了这个我们不知道任何其他的信息,只能通过console.log()去查看,使用起来不是很方便。所以,今天给大家推荐一个强大的断言库power-assert,如何使用它呢?首先在您的项目工程目录下安装一些必要的包:

npm install --save-dev mocha power-assert intelli-espower-loader

安装后在你的工程目录下新建一个test文件夹并把你的测试代码放到该文件夹下(注意,如果没有指定测试路径,其默认名字必须叫test),下面是作者写的一些测试代码test/test.js,其用来验证power-assertshould.js的区别

const assert = require('power-assert');
const should = require('should');      // 别忘记 npm install should
const obj = {  
  arr: [1,2,3],  
  number: 10
};

describe('should.js和power-assert的区别', () => {  
  it('使用should.js的情况', () => {    
    should(obj.arr[0]).be.equal(obj.number);      // should api
  });  

  it('使用power-assert的情况', () => {    
    assert(obj.arr[0] === obj.number);      // 用assert就可以
  });
});

启动mocha进行测试:

node_modules/mocha/bin/mocha --require intelli-espower-loader test/test.js
运行结果

我们可以看到power-assert的强大之处,相比于should.js仅仅提供的判断性信息,power-assert则给开发者提供了尽可能多的描述性信息,而且还完全兼容Node.js内置模块Assert的全部APIs,不需要学习其他断言库的海量APIs如should.jschaiexcept.js等等,它的宗旨就是No API is the best API,坚持最简单的测试形式为原则,你甚至只需要使用assert(any_expression)这一个方法即可满足你全部的测试需求,相当于没有API的概念,而且还可以自定义我们自己的APIs(customization-api),是不是很强大呢!
最后,贴上一些测试代码供读者参考,体验power-assert的强大吧!

var assert = require('power-assert');

describe('Array', function () {
  beforeEach(function () {
    this.ary = [1, 2, 3];
  });
  describe('#indexOf()', function () {
    it('should return index when the value is present', function () {
      var zero = 0, two = 2;
      assert(this.ary.indexOf(zero) === two);
    });
    it('should return -1 when the value is not present', function () {
      var minusOne = -1, two = 2;
      assert.ok(this.ary.indexOf(two) === minusOne, 'THIS IS AN ASSERTION MESSAGE');
    });
  });
});

describe('various types', function () {
  function Person(name, age) {
    this.name = name;
    this.age = age;
  }

  beforeEach(function () {
    this.types = [
      'string', 98.6, true, false, null, undefined,
      ['nested', 'array'],
      {object: true},
      NaN, Infinity,
      /^not/,
      new Person('alice', 3)
    ];
  });
  it('demo', function () {
    var index = this.types.length - 1,
      bob = new Person('bob', 5);
    assert(this.types[index].name === bob.name);
  });
});

ps:这里科普一下,npm中的--save--save-dev参数的区别,--save一般规定把产品运行时(或生产环境)需要的npm包存入到package.jsondependencies中,而--save-dev则是将产品的开发环境需要的npm包存入到package.jsondevDependencies中,上面提到的mochapower-assert就属于开发环境需要的依赖(他们只负责单体测试,是独立于项目应用运行的),所以作者用了--save-dev的参数,当然这里没有硬性的规定,用哪个方案程序都可以正确运行,只是方便开发者管理而已。

power-assert 参考
Node.js Assert 参考

简书作者 小菜荔枝 转载请联系作者获得授权

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

推荐阅读更多精彩内容