Chai 中的 expect 和 should 断言库的使用方式和功能介绍

在前端开发中,测试是不可或缺的一部分。为了方便测试,Chai 是一个非常优秀的断言库。Chai 支持三种断言风格:shouldexpectassert。其中,shouldexpect 是应用最广泛的。

1. expect 断言库的使用方式

在测试用例中,我们通常会使用 expect 断言库,它的使用方式很简单。我们只需要引入和安装这个库,然后就可以在测试中使用它。

安装 expect 断言库

安装成功后,我们可以使用以下方式引入 expect 断言库:

当然,我们还可以使用 ES6 的 import 引入:

接下来,我们来介绍一下 expect 断言库的基本用法。

1.1. 相等、不相等断言

在测试中,我们通常需要判断两个值是否相等或不相等。使用 expect 断言库,我们可以使用以下语句进行判断:

其中,ab 都是待测试的值。如果两个值相等,第一条语句就能通过测试;如果它们不相等,第二条语句就会通过测试。我们还可以使用 deep 断言来比较对象是否相等,比如:

上述代码中,我们并没有按照对象属性的顺序写出来,但是它们的值是相等的。

1.2. 包含、不包含断言

我们通常需要判断一个字符串或数组是否包含或不包含某个值,或者判断一个对象是否包含或不包含某个属性。在 expect 断言库中,我们可以使用以下语句:

如果 arr 是一个数组且包含值为 val 的元素,上述语句第一条就能通过测试;如果 str 是一个字符串且包含子串 substring,第二条语句就会通过测试。第三条语句则是用来判断一个对象是否包含属性 key

除了判断包含,我们还可以使用不包含的语句:

1.3. 抛出、不抛出异常断言

在测试中,我们通常需要测试某个函数是否会抛出异常。在 expect 断言库中,我们可以使用以下语句进行测试:

上述语句能够通过测试的前提是,fn 必须抛出一个异常。如果 fn 没有抛出异常,上述语句就会失败。

如果我们要测试抛出的异常类型,可以使用以下语句:

第一条语句用于检查是否抛出了 Error 类型的异常,第二条语句用于检查异常信息是否满足正则表达式 /error message/

除了测试抛出异常,我们也需要测试某个函数不抛出异常的情况。在 expect 断言库中,我们可以使用以下语句:

1.4. 类型断言

在测试中,我们通常需要检查一个值的类型是否正确。在 expect 断言库中,我们可以使用以下语句进行类型检查:

上述语句分别检查数组、数字、字符串的类型是否正确。

1.5. 数字、布尔值、字符串相关的断言

在 expect 断言库中,还有很多数字、布尔值和字符串相关的断言,这里就不一一介绍了。

2. should 断言库的使用方式和功能

与 expect 断言库不同,should 断言库是在 Object 原型链上挂载的。当我们初始化 should 断言库时,它会在实例的原型链上挂载 should 方法,这样我们就可以使用 should 方法对值进行测试了。

安装 should 断言库

安装成功后,我们可以使用以下方式引入 should 断言库:

当然,我们还可以使用 ES6 的 import 引入:

接下来,我们来介绍一下 should 断言库的基本用法。

2.1. 相等、不相等断言

在 should 断言库中,我们可以使用下面的语句进行相等和不相等的断言:

其中,ab 都是待测试的值。如果两个值相等,第一条语句就能通过测试;如果它们不相等,第二条语句就能通过测试。相比 expect 断言库,should 断言库的语法更直观,符合英语的语言习惯,更容易学习和记忆。

2.2. 包含、不包含断言

在 should 断言库中,我们可以使用以下语句进行包含和不包含的断言:

如果 arr 是一个数组且包含值为 val 的元素,上述语句第一条就能通过测试;如果 str 是一个字符串且包含子串 substring,第二条语句就会通过测试。第三条语句则是用来判断一个对象是否包含属性 key

除了判断包含,我们还可以使用不包含的语句:

2.3. 抛出、不抛出异常断言

在 should 断言库中,我们可以使用以下语句进行抛出和不抛出异常的断言:

上述语句与 expect 断言库中的语句相同,不过我们使用 should 方法进行测试。如果 fn 没有抛出异常,第二条语句就会通过测试。

2.4. 类型断言

在 should 断言库中,我们可以使用以下语句进行类型检查:

上述语句与 expect 断言库中的语句相同,不过我们使用 should 方法进行测试。

2.5. 数字、布尔值、字符串相关的断言

在 should 断言库中,还有很多数字、布尔值和字符串相关的断言,这里就不一一介绍了。

3. 总结

无论是 expect 还是 should 断言库,都是非常优秀的断言库,使用它们可以让我们的测试更加简单、直观。相比于 expect 断言库,should 断言库的语法更直观,适合初学者学习和使用。对于熟悉 expect 断言库的人来说,也可以通过比较它们之间的语法区别,了解其内部实现机制,从而更好地学习和使用这两个库。

示例代码:

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6527c1c87d4982a6eba56a3e


纠错
反馈