chai.js 断言库使用说明 (Expect 风格写法)
简介
Chai.js 是一个非常流行的 JavaScript 断言库,主要用于配合如 Mocha, Jest 等测试框架编写用户端或服务端的 JavaScript 测试。它提供了 BDD(Behavior-Driven Development,行为驱动开发) 和 TDD(Test-Driven Development,测试驱动开发)两种样式的断言,即 expect,should, assert 三种。
expect 和 should 属于 BDD 风格,他们都是链式语法,所不同的是 expect 是直接调用,而 should 则是添加在任何 JavaScript 对象上,他们的使用场景都是 BDD。
expect(true).to.be.true;true.should.be.true;assert 是 TDD 风格,它看起来更像一个函数。
assert(true, "True is true");Chai 的主要优点是其易于使用和灵活性。它支持插件,并且对多种环境有良好的兼容性,包括 Node.js, 浏览器, 和各种 JavaScript 构建工具(如 Browserify, Webpack)。
通过使用不同类型的断言,你可以选择适合你测试风格的类型。对于更复杂的用例,Chai 提供了友好的错误消息,帮助你快速理解测试失败的原因。
Expect 风格写法
以下指南介绍了如何使用 Expect 风格编写各种类型的断言。
引入 Expect
在测试文件头部,使用 ES6 模块导入语法引入 Chai 库的 Expect 风格:
import { expect } from "chai";等于
检查两个值是否相等:
expect("hello").to.equal("hello");
expect(42).to.equal(42);
expect(1).to.not.equal(true);深度相等
如果你要检查两个对象或数组的值是否相同:
expect({ foo: "bar" }).to.deep.equal({ foo: "bar" });
expect([1, 2, 3]).to.deep.equal([1, 2, 3]);包含
例子:检查数组是否包含某个元素或字符串包含一段字串:
expect([1, 2, 3]).to.include(2);
expect("foobar").to.contain("foo");大于、大于等于、小于、小于等于
expect(10).to.be.above(5);
expect(10).to.be.at.least(10);
expect(10).to.be.below(20);
expect(10).to.be.at.most(20);判断属性是否存在
检查对象中是否存在某个属性:
expect({ a: 1 }).to.have.property("a");包含键
假设你要检查一个对象是否包含一个或者多个键:
expect({ a: 1, b: 2, c: 3 }).to.include.keys("a", "b");
expect({ x: 1, y: 2, z: 3 }).to.not.include.keys("p", "q");类型
检查值的类型:
expect("test").to.be.a("string");
expect({ foo: "bar" }).to.be.an("object");
expect(null).to.be.a("null");
expect(undefined).to.be.a("undefined");不为空
检查一个值是否为空
expect("Hello").to.not.be.empty;
expect([]).to.be.empty;类型和类型的属性
希望类型是某个特定的结构的时候可以用property和a或an联合使用。
expect({ tea: { temperature: "hot", name: "chai" } })
.to.have.property("tea")
.which.has.a.property("temperature")
.that.is.a("string");用'.throw'测试可能出错的函数
假设你测试一个可能抛出错误的函数,你可以使用 throw 结构:
let badFn = function () {
throw new TypeError("Illegal salmon!");
};
expect(badFn).to.throw();
expect(badFn).to.throw("salmon");
expect(badFn).to.throw(/salmon/);
expect(badFn).to.throw(TypeError);
expect(badFn).to.throw(TypeError, "salmon");其他
这只是 Chai.js Expect 风格断言更多的用法教程,详细信息请参考 Chai.js Expect API 文档。
注
无
参考
无

