当前位置: 首页 > 工具软件 > Chai > 使用案例 >

Chai.js

阎成天
2023-12-01

Chai 是一套 BDD/TDD 的断言库。可以在 node 和浏览器环境运行。可以和任何 JS 测试框架搭配使用。

BDD:行为驱动开发。
TDD:测试驱动开发。

chai 提供了三种断言风格来分别适用于 BDD 和 TDD,expact/should API 对应 BDD 风格, assert API 对应 TDD 风格。

expect 和 should 都是 BDD 风格的,二者使用相同的链式语言来阻止断言,但不同之处在于它们初始化断言的方式:

  1. expect 使用构造函数来创建断言对象实例;而 should 通过为 Object.prototype 新增方法来实现断言,所以 should 不兼容 IE;
  2. expect 直接指向 chai.expect;而 should 则是 chai.should();
var chai = require('chai') ,
expect = chai.expect ,
should = chai.should()

安装:

npm install chai

expect 的语法:

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');
 类似资料:

相关阅读

相关文章

相关问答