Chai 是一套 BDD/TDD 的断言库。可以在 node 和浏览器环境运行。可以和任何 JS 测试框架搭配使用。
BDD:行为驱动开发。
TDD:测试驱动开发。
chai 提供了三种断言风格来分别适用于 BDD 和 TDD,expact/should API 对应 BDD 风格, assert API 对应 TDD 风格。
expect 和 should 都是 BDD 风格的,二者使用相同的链式语言来阻止断言,但不同之处在于它们初始化断言的方式:
- expect 使用构造函数来创建断言对象实例;而 should 通过为 Object.prototype 新增方法来实现断言,所以 should 不兼容 IE;
- expect 直接指向 chai.expect;而 should 则是 chai.should();
var chai = require('chai') , expect = chai.expect , should = chai.should()
npm install chai
expect断言的写法都是一样的。头部是expect方法;尾部是断言方法(比如equal、a/an、ok、match等);两者之间使用 to 或 to.be 连接。
expect('foo').to.be.a('string');
可以对js中各种数据类型进行判断,包括常见的数字、字符串、布尔值、对象、数组、函数及ES6新增的数据类型。
a/an修饰符:用来判断变量类型。
expect('foo').to.be.a('string');
expect(false).to.be.a('boolean');
expect(12).to.be.a('number');
expect(null).to.be.a('null');
expect(undefined).to.be.a('undefined');
expect({}).to.be.a('object');
expect([]).to.be.a('array');
expect(Math.cos).to.be.a('function');
expect(new Error).to.be.a('error');
expect(/123/).to.be.a('regexp');
not 修饰符:跟在链式调用后面的否定断言。
expect(foo).to.not.equal('bar');
equal 修饰符:断言基本类型的目标严格等于期望的值。
eql 修饰符:断言引用类型的目标严格等于期望的值,相当于 deep.equal 的简写。
expect(1).to.equal(1);
expect('foo').to.equal('foo');
expect(true).to.equal(true);
expect(null).to.equal(null);
expect(undefined).to.equal(undefined);
expect({a: 1}).to.eql({a: 1});
expect([1, 2]).to.deep.equal([1, 2]);
above 修饰符:断言目标大于期望的值。
least 修饰符:断言目标大于等于期望的值。
below 修饰符:断言目标小于期望的值。
most 修饰符:断言目标小于等于期望的值。
expect(50).to.be.above(12);
expect([1, 2, 3]).to.have.length.above(2);
lengthOf 修饰符:断言目标的 length 属性为期望的值。
expect([1, 2, 3]).to.have.lengthOf(3);
expect('foo').to.have.lengthOf(3);
expect([]).to.have.lengthOf(0);
expect('').to.have.lengthOf(0);
include 修饰符:用来判断是否包含某个内容。
match 修饰符:断言目标匹配到一个正则表达式。
expect('foobar').to.include('foo');
expect([1, 2, 3]).to.include(2);
expect('foobar').to.match(/^foo/);
expect({a: 1}).to.have.property('a');
expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
expect({a: 1, b: 2}).to.have.any.keys('a');