Chai.js 中使用 expect 或 assert 的最佳实践

阅读时长 5 分钟读完

在前端开发中,测试是非常重要的,而 Chai.js 是一个开源的断言库,可以帮助我们更好的进行测试。Chai.js 提供了两种方式去断言:expect 和 assert,下面来介绍一下在 Chai.js 中如何使用这两种方式和最佳实践。

expect

expect 的使用方式相对简单,便于可读性和可维护性:

常用的 expect 断言

类型判断

  • expect(foo).to.be.a('string'):判断 foo 是字符串类型
  • expect(foo).to.be.an.instanceof(Foo):判断 foo 是 Foo 类的实例

值判断

  • expect(foo).to.equal('bar'):判断 foo 的值等于 bar
  • expect(foo).to.be.empty:判断 foo 为空
  • expect(foo).to.include('bar'):判断 foo 包含 bar
  • expect(foo).to.have.lengthOf(3):判断 foo 的长度是 3
  • expect(foo).to.match(/^bar$/): 断言 foo 通过正则 /^bar$/ 的匹配

对象和属性判断

  • expect(foo).to.be.a('object'):判断 foo 是对象类型
  • expect(foo).to.have.property('bar'):判断 foo 包含属性 bar
  • expect(foo).to.have.property('bar', 'baz'):判断 foo 的属性 bar 的值为 baz
  • expect(foo).to.be.deep.equal({a: 'foo', b: 'bar'}): 判断 foo 深等于 {a: 'foo', b: 'bar'}

expect 最佳实践

  • 使用 to.be.a()to.be.an.instanceof() 来判断变量类型
  • 尽可能地使用链式调用
  • 使用 to.be.ok 来判断变量是否存在或是否为 true
  • 使用 to.exist 来判断变量是否存在
  • 使用 to.be.empty 来判断变量是否为空数组或对象
  • 使用 to.includeto.not.include 来判断数组或字符串是否包含某一项
  • 对于对象类型,使用 to.have.property 来判断属性是否存在和属性的值
  • 对于数组类型,使用 to.have.lengthOf 来判断长度

assert

assert 模块的使用方式更为简单,如下所示:

常用的 assert 断言

类型判断

  • assert.typeOf(foo, 'string'):判断 foo 是字符串类型
  • assert.instanceOf(foo, Foo):判断 foo 是 Foo 类的实例

值判断

  • assert.equal(foo, 'bar'):判断 foo 的值等于 bar
  • assert.isEmpty([]):判断一个空数组
  • assert.isNotEmpty([1]):判断一个非空数组
  • assert.include(foo, 'bar'):判断 foo 包含 bar
  • assert.lengthOf(foo, 3):判断 foo 的长度是 3

对象和属性判断

  • assert.isObject(foo):判断 foo 是对象类型
  • assert.property(foo, 'bar'):判断 foo 包含属性 bar
  • assert.propertyVal(foo, 'bar', 'baz'):判断 foo 的属性 bar 的值为 baz
  • assert.deepEqual(foo, {a: 'foo', b: 'bar'}):判断 foo 深等于 {a: 'foo', b: 'bar'}

assert 最佳实践

  • 使用 typeOf()instanceOf() 来判断变量类型
  • 尽可能地使用链式调用
  • 使用 isTrue()isFalse() 来判断变量是否为 true 或 false
  • 使用 isEmpty()isNotEmpty() 来判断数组是否为空
  • 使用 include()notInclude() 来判断数组或字符串是否包含某一项
  • 对于对象类型,使用 property() 来判断属性是否存在
  • 对于数组类型,使用 lengthOf() 来判断长度

Chai.js 模块化使用

在实际开发中,测试代码数量通常非常庞大,因此将测试代码分成多个文件和多个测试用例是非常必要的。

-- -------------------- ---- -------
----- ---- - ----------------
----- ------ - ------------

----------------- ---------- -
  ---------------------- ---------- -
    ---------- ------ -- ---- --- ----- -- --- --------- ---------- -
      ----------------------------------------
    ---
  ---
---

在上面的代码中,我们使用了 describe 和 it 函数创建了测试套件和测试用例,可以支持多个 describe 和 it。

总结

在 Chai.js 中,expect 和 assert 的使用都很简单,但是根据应用场景选择更合适的方式可以使测试代码更加清晰和易于维护。通常情况下,我们更建议使用 expect 来进行测试,在使用过程中尽可能多的运用链式调用方式。

希望这篇文章能够帮助大家更加深入的了解 Chai.js 的使用方式和最佳实践。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cee7abb5eee0b525675608

纠错
反馈