Mocha 报错 AssertionError 没有输出期望值和实际值,怎么回事?

Mocha 报错 AssertionError 没有输出期望值和实际值,怎么回事?

在前端开发中,我们常常使用 Mocha 进行单元测试。然而,在测试过程中,我们有时会遇到 AssertionError 没有输出期望值和实际值的情况,这会给我们的测试工作带来一定的困扰。本文将详细介绍这个问题的原因和解决方法,希望能够给大家带来一些帮助。

问题原因

Mocha 中的 AssertionError 是由 Chai 库抛出的。当我们使用 Chai 的断言方法时,如果断言失败,Chai 会抛出一个 AssertionError 异常。然而,在某些情况下,我们会发现 AssertionError 没有输出期望值和实际值,这会让我们很难排查问题。

这个问题的原因是,Chai 在抛出 AssertionError 异常时,并不会把期望值和实际值一起输出。而是在 AssertionError 的 message 属性中只输出了一个错误提示信息。这个错误提示信息并没有包含期望值和实际值,因此我们就很难知道具体是哪个断言出了问题。

解决方法

要解决这个问题,我们需要对 Mocha 和 Chai 进行一些配置。具体步骤如下:

步骤一:安装 chai-subset

chai-subset 是一个 Chai 的插件,可以让我们在断言失败时输出期望值和实际值。我们需要先安装 chai-subset:

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

步骤二:在测试文件中引入 chai-subset

在测试文件的开头,我们需要引入 chai-subset:

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

步骤三:使用 chaiSubset 包装 expect 对象

在使用 expect 断言时,我们需要使用 chaiSubset 包装 expect 对象。这样,当断言失败时,就会输出期望值和实际值。

例如,我们有一个测试用例:

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

如果我们不使用 chaiSubset,当这个测试用例失败时,我们只能看到一个错误提示信息:

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

这个错误提示信息并没有包含期望值和实际值。但是,如果我们使用 chaiSubset,我们就可以看到期望值和实际值:

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

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

通过这个输出,我们就可以很清楚地知道期望值和实际值的具体差异了。

总结

Mocha 报错 AssertionError 没有输出期望值和实际值的问题,是由于 Chai 在抛出 AssertionError 异常时,并没有把期望值和实际值一起输出。为了解决这个问题,我们需要安装 chai-subset 插件,并对 Mocha 和 Chai 进行一些配置。使用 chaiSubset 包装 expect 对象,就可以在断言失败时输出期望值和实际值了。这个方法可以帮助我们更快地排查测试用例的问题,提高测试效率。

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