BDD风格的测试断言库 should

 2016年05月02日    101     声明


should是一个与测试框架无关的、表现力强且易读、BDD风格的断言库。与Node.js的assert模块相比,它的表达性更强更有用,让你的测试代码更简单、错误帮助信息更有用。


  1. 模块介绍与安装
  2. 使用示例

1. 模块介绍与安装

should模块可以通过npm命令安装,并通过--save-dev参数将依赖关系保持到package.json文件的devDependencies节点中:

npm install should --save-dev

模块安装后,通过require('should')方法引用should后,它会扩展一个Object.prototype不可枚举的访问器,然后你所使用的对象就具有了should的一些形为。

var should = require('should');
 
(5).should.be.exactly(5).and.be.a.Number();

也可以不通过访问器的形式使用should.js,通过require('should/as-function')的方式引用,并通过引用变量即可进行访问:

var should = require('should/as-function');
 
should(10).be.exactly(5).and.be.a.Number();


2. 使用示例

require('should')引用should.js后,测试对象中会被添加should属性并据有其表现形为,这样的我们就可以通过其should属性来进行相关断言。或者,也可以通过其引用变量来进行测试断言。根据对象创建形式的不同,可以通过以下两种方式进行should断言:

var should = require('should');
 
var user = {
    name: 'tj'
  , pets: ['tobi', 'loki', 'jane', 'bandit']
};
 
user.should.have.property('name', 'tj');
user.should.have.property('pets').with.lengthOf(4);
 
// 如果对象是通过 Object.create(null) 创建
// 那么它不会继承 `Object.prototype` 所以它也不会据有 `.should` 访问器属性 
// 这时,我们应该使用以下方式进行断言:
should(user).have.property('name', 'tj');
 
// 可以 should(null).not.be.ok(); 进行空值测试
someAsyncTask(foo, function(err, result){
  should.not.exist(err);
  should.exist(result);
  result.bar.should.equal(foo);
});


链式断言

require()调用后相关对象中会有should.js中的属性,这些属性可以链式的调用。你可以断言中按需要使用.an/.of/.a/.and/.be/.have/.with/.is/.which等方法。如:

user.should.be.an.instanceOf(Object).and.have.property('name', 'tj');
user.pets.should.be.instanceof(Array).and.have.lengthOf(4);


should.js完整的API文档,可以通过http://shouldjs.github.io/来查看