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