Mocha 报错 TypeError: Cannot read property 'resetHistory' of undefined

阅读时长 3 分钟读完

Mocha 是一款流行的 JavaScript 测试框架,它能够帮助开发者更加方便地进行单元测试、集成测试等各类测试工作。然而,在使用 Mocha 进行测试的过程中,有时候会出现一些错误信息,其中最常见的错误之一就是 TypeError: Cannot read property 'resetHistory' of undefined。

问题描述

当你在使用 Mocha 进行测试时,如果遇到了 TypeError: Cannot read property 'resetHistory' of undefined 这个错误信息,那么通常情况下,它的出现原因是你在使用 Sinon.js 的 stub 或者 spy 的时候,没有正确地初始化相关的对象。

解决方案

要解决这个问题,我们需要对 Sinon.js 的 stub 和 spy 进行正确的初始化。具体来说,我们需要确保在测试代码中正确地创建了相关的对象,并将其传递给 Sinon.js 的 stub 或者 spy。

下面是一个简单的示例代码,展示了如何在 Mocha 中正确地使用 Sinon.js:

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

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

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

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

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

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

在上面的代码中,我们首先创建了一个 myObj 对象,并在 beforeEach 钩子函数中对其进行初始化。然后,在测试用例中,我们使用 Sinon.js 的 stub 对 myObj.someMethod 进行了模拟,并将其返回值设置为 'Goodbye World'。最后,我们调用了 myObj.someMethod,并使用 assert.equal 来验证其返回值是否为 'Goodbye World'。

需要注意的是,在测试用例中,我们还使用了 sinon.assert.calledOnce(stub) 来确保 myObj.someMethod 只被调用了一次。最后,我们还需要在测试用例结束后,调用 stub.restore() 来恢复 myObj.someMethod 的原始实现。

结论

在 Mocha 中使用 Sinon.js 进行 stub 和 spy 的时候,如果遇到 TypeError: Cannot read property 'resetHistory' of undefined 这个错误信息,那么通常情况下,它的出现原因是你在使用 Sinon.js 的 stub 或者 spy 的时候,没有正确地初始化相关的对象。要解决这个问题,我们需要确保在测试代码中正确地创建了相关的对象,并将其传递给 Sinon.js 的 stub 或者 spy。同时,在测试用例中,我们还需要使用 sinon.assert.calledOnce(stub) 来确保被测试的方法只被调用了一次,并在测试用例结束后,调用 stub.restore() 来恢复被测试的方法的原始实现。

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

纠错
反馈