Chai 中所有断言函数的类型及可以接受的参数类型
在前端开发中,测试是非常重要的一环。作为测试框架中最流行的断言库之一,Chai 为开发者提供了多种不同类型的断言函数。本文将介绍 Chai 中所有断言函数的类型及可以接受的参数类型,旨在提供深度而且有学习和指导意义的技术内容。
Chai 中的主要断言函数类型包括:
- assert 断言函数
- expect 断言函数
- should 断言函数
下面我们将分别介绍这三种类型的函数以及各自可以接受的参数类型。
- assert 断言函数
assert 函数是 Chai 中最基础的函数,它包含了几个常用的断言方法,用于判断实际的结果是否等于预期的结果,以及一些其他的错误判断:
- assert.equal(actual, expected, [message]) 断言实际值与期望值相等。
- assert.notEqual(actual, expected, [message]) 断言实际值与期望值不相等。
- assert.strictEqual(actual, expected, [message]) 断言实际值与期望值完全相等(包括类型)。
- assert.notStrictEqual(actual, expected, [message]) 断言实际值与期望值不完全相等(包括类型)。
- assert.deepEqual(actual, expected, [message]) 断言实际值与期望值对象的内容是一致的。
- assert.notDeepEqual(actual, expected, [message]) 断言实际值与期望值对象的内容不一致。
- assert.isTrue(value, [message]) 断言实际值为 true。
- assert.isFalse(value, [message]) 断言实际值为 false。
- assert.isZero(value, [message]) 断言实际值为 0。
- assert.isOk(value, [message]) 断言实际值为真值。
- assert.isNotOk(value, [message]) 断言实际值为假值。
- assert.isNull(value, [message]) 断言实际值为 null。
- assert.isNotNull(value, [message]) 断言实际值不为 null。
- assert.isUndefined(value, [message]) 断言实际值为 undefined。
- assert.isDefined(value, [message]) 断言实际值不为 undefined。
- assert.isFunction(value, [message]) 断言实际值为函数类型。
- assert.isNotFunction(value, [message]) 断言实际值不为函数类型。
- assert.isObject(value, [message]) 断言实际值为对象类型。
- assert.isNotObject(value, [message]) 断言实际值不为对象类型。
- assert.isArray(value, [message]) 断言实际值为数组类型。
- assert.isNotArray(value, [message]) 断言实际值不为数组类型。
- assert.isString(value, [message]) 断言实际值为字符串类型。
- assert.isNotString(value, [message]) 断言实际值不为字符串类型。
- assert.isNumber(value, [message]) 断言实际值为数值类型。
- assert.isNotNumber(value, [message]) 断言实际值不为数值类型。
- assert.isBoolean(value, [message]) 断言实际值为布尔类型。
- assert.isNotBoolean(value, [message]) 断言实际值不为布尔类型。
- assert.typeOf(value, name, [message]) 断言实际值的类型为 name 类型。
- assert.instanceOf(value, constructor, [message]) 断言实际值为 constructor 的实例。
- assert.include(value, inclusion, [message]) 断言实际值中包含 inclusion 的元素。
- assert.notInclude(value, exclusion, [message]) 断言实际值中不包含 exclusion 的元素。
- assert.match(value, regexp, [message]) 断言实际值与 regexp 匹配。
- assert.notMatch(value, regexp, [message]) 断言实际值与 regexp 不匹配。
- assert.property(object, property, [message]) 断言 object 中有属性 property。
- assert.notProperty(object, property, [message]) 断言 object 中没有属性 property。
- assert.propertyVal(object, property, value, [message]) 断言 object 中属性 property 的值为 value。
- assert.propertyNotVal(object, property, value, [message]) 断言 object 中属性 property 的值不为 value。
- assert.throw(fn, [constructor/string/regexp], [message]) 断言 fn 抛出异常。
- assert.doesNotThrow(fn, [constructor/string/regexp], [message]) 断言 fn 没有抛出异常。
这些断言方法可以用于各种类型的数据,包括基本类型和对象类型。具体使用方法可以参考下面的示例代码:
-- -------------------- ---- ------- ----- ------ - ----------------------- -- ---- ------------ ---------------- --------------- -- -- -- ---- -- -- --------------- -- -- --- ---- -- -- -- ---- ------------- ----------- ---- ------------------- ----- ------ -- -- -------------------- ------ ------- -- -- -- ---- --------------- --------------- ----------------- ---- ------- -- ------------ -- -- ------------------ ------------- -- --
- expect 断言函数
expect 函数是一个更加简洁而易读的语法,它提供了几个类似于 assert 的方法,通过链式调用的形式可以表述出预期的结果:
- expect(actual).to.equal(expected) 断言实际值与期望值相等。
- expect(actual).to.not.equal(expected) 断言实际值与期望值不相等。
- expect(actual).to.be.a('type') 断言实际值为类型 type。
- expect(actual).to.equal(expected) 断言实际值与期望值相等。
- expect(actual).to.eql(expected) 断言实际值与期望值对象的内容是一致的。
- expect(actual).to.be.true 或 expect(actual).to.be.false 断言实际值为 true 或 false。
- expect(actual).to.be.ok 断言实际值为真值。
- expect(actual).to.not.be.ok 断言实际值为假值。
- expect(actual).to.be.null 断言实际值为 null。
- expect(actual).to.not.be.null 断言实际值不为 null。
- expect(actual).to.be.undefined 或 expect(actual).to.not.exist 断言实际值为 undefined。
- expect(actual).to.be.a('function') 或 expect(actual).to.be.a('object') 断言实际值为函数或对象。
- expect(actual).to.not.be.a('function') 或 expect(actual).to.not.be.a('object') 断言实际值不为函数或对象。
- expect(actual).to.include(value) 断言实际值中包含 value 的元素。
- expect(actual).to.not.include(value) 断言实际值中不包含 value 的元素。
- expect(actual).to.match(regexp) 断言实际值与 regexp 匹配。
- expect(actual).to.not.match(regexp) 断言实际值与 regexp 不匹配。
- expect(actual).to.have.property(key) 断言对象 actual 中有属性 key。
- expect(actual).to.not.have.property(key) 断言对象 actual 中没有属性 key。
- expect(actual).to.have.property(key, value) 断言对象 actual 中属性 key 的值为 value。
- expect(actual).to.not.have.property(key, value) 断言对象 actual 中属性 key 的值不为 value。
- expect(fn).to.throw([error]) 断言 fn 抛出异常。
- expect(fn).to.not.throw([error]) 断言 fn 没有抛出异常。
在使用 expect 函数时,需要先调用 expect() 方法来传入实际值,然后通过链式调用的形式依次调用方法。下面是一个实例:
-- -------------------- ---- ------- ----- ------ - ----------------------- -- ---- ----------------- ---------------- ---------------------- -- -- ---------------------- -- -- -- ---- --------------------- --------------- ---------- -- -------------------------- -- -- -- ---- --------------- --------------------- -------- ---- ------- ----------- ---- ------- --- -- -- -- ---- ---------------- ---------- ----------------------------------- -- -- ----------------------------- -- -- -- ---- ------------------- --------------------------- ---------- -- ------------------ -- -- -- ---- ----------------- --------------- --------- -- - ----- --- -------------- ------------------- -- --
- should 断言函数
should 函数是一种非常优雅的断言方法,它使用方式类似于 expect 函数,但却更加语义化和优雅。should 函数提供了和 expect 函数几乎相同的方法,它并没有返回一个断言对象,而是在对象的所有属性中添加一个 should 属性。
should 对象支持链式调用,在方法链的末尾可以使用 valueOf() 方法来执行实际的断言操作。下面是 should 函数的示例:
-- -------------------- ---- ------- ----- ------ - ------------------------- -- -- ------------ ---------------- -------------------- -- -- -------------------- -- -- -- -- ---------------- --------------- ----- -- ------------------------ -- -- -- -- -------------------- --------------- -- ---- ------- ------------------------------- -- -- -- -- ------------ --------------- --- -- - ----- --- -------------- ----------------------- -- --
本文介绍了 Chai 中的三种不同类型的断言函数及其中的一些方法,同时介绍了这些函数可以接受的参数类型。通过本文的学习,读者应该已经了解了 Chai 的基本用法,可以在实际开发中使用 Chai 进行更加高效、严谨的测试工作。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6795e5f6504e4ea9bdc21b7c