Chai 中 Stub、Spy、Mock 的分别使用方法与区别

阅读时长 4 分钟读完

Chai 中 Stub、Spy、Mock 的分别使用方法与区别

在前端开发中,测试是一个不可或缺的部分。对于 JavaScript 的测试,Chai 可谓是非常实用的一个工具库。其中,Stub、Spy、Mock 是 Chai 中非常重要的几个概念。本篇文章将为大家介绍它们的分别使用方法与区别。

  1. Stub

Stub 是指一种测试技术,用来替换掉测试过程中所需要的函数。简单来说,它可以模拟一个函数,以便在测试中替代原本的函数。同时 Stub 可以返回自定义数据,而不是真正的数据。调用 Stub 函数时它将返回设定的默认值,而不是执行原函数。这在测试时特别有用,因为它可以确保测试只依赖于被测试单元的局部功能。

下面是一个简单的例子:

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

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

在上述代码中,chai 中的 spy 是用来创建 Stub 的函数,它的第一个参数是一个对象,第二个参数是你需要替换的函数的名称。通过 chai.spy.on 方法,我们将 obj 对象的 add 方法替换为 Stub 。

最后通过调用 chai.spy.on 方法返回的函数 add,可以统计该方法是否被调用,被调用的次数等其他信息。

  1. Spy

Spy 和 Stub 很相似,但它们的区别在于 Spy 不会替换函数。Spy 的主要作用是监听函数被调用的情况。我们可以通过 Spy 中提供的 calledcalledOncecalledTwicecalledThrice 等方法来统计该函数被调用的次数。

下面是一个简单的例子:

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

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

在这个例子中,我们同样是通过 chai.spy.on 来创建 Spy,然后在调用被 Spy 替代的方法后可以确认 add 函数的 called 方法返回值是否正确,以及它被调用了几次,是否传入了正确的参数。

  1. Mock

Mock 是一种更为复杂的测试技术,它在一定程度上可以取代 Stub 和 Spy。Mock 本身可以包含多个 Stub 和多个 Spy ,提供更为强大的测试功能。它可以拦截函数调用,并返回程序员设置的测试数据。

下面是一个简单的例子:

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

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

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

在上述代码中,我们使用 chai.spy.obj 创建了一个 Mock 对象。接下来,我们通过指定 mock.isLogin 函数来覆盖原对象的同名方法。

最后,我们确认 mock.isLogin() 方法通过了测试。这个测试的目的是为了确认该函数的输出是否为 false。如果是的话,测试就通过了。

需要注意的是,Mock 对象可以包含多个 Spy 和多个 Stub,提供了更为强大的测试功能。

总结

通过本篇文章的介绍,我们了解了 Chai 中的三个重要概念:Stub、Spy、Mock。其中,Stub 和 Spy 是非常相似的,它们都用于监听函数的调用情况。而 Mock 则提供了更为强大的测试功能,对于比较复杂的测试,使用 Mock 是个不错的选择。

在测试中,我们需要使用 Stub、Spy、Mock 来检查代码的输出和行为,以确保代码的正确性。当然,它们的使用也需要谨慎,过量的使用可能会造成测试用例的冗余。

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

纠错
反馈