Chai 中 Stub、Spy、Mock 的分别使用方法与区别
在前端开发中,测试是一个不可或缺的部分。对于 JavaScript 的测试,Chai 可谓是非常实用的一个工具库。其中,Stub、Spy、Mock 是 Chai 中非常重要的几个概念。本篇文章将为大家介绍它们的分别使用方法与区别。
- Stub
Stub 是指一种测试技术,用来替换掉测试过程中所需要的函数。简单来说,它可以模拟一个函数,以便在测试中替代原本的函数。同时 Stub 可以返回自定义数据,而不是真正的数据。调用 Stub 函数时它将返回设定的默认值,而不是执行原函数。这在测试时特别有用,因为它可以确保测试只依赖于被测试单元的局部功能。
下面是一个简单的例子:
-- -------------------- ---- ------- --- --- - - ---- -------- --- -- - ------ - - -- - -- --- --- - ---------------- ------- ----------------- ---------------- -------------------------------------
在上述代码中,chai
中的 spy
是用来创建 Stub 的函数,它的第一个参数是一个对象,第二个参数是你需要替换的函数的名称。通过 chai.spy.on
方法,我们将 obj 对象的 add 方法替换为 Stub 。
最后通过调用 chai.spy.on
方法返回的函数 add
,可以统计该方法是否被调用,被调用的次数等其他信息。
- Spy
Spy 和 Stub 很相似,但它们的区别在于 Spy 不会替换函数。Spy 的主要作用是监听函数被调用的情况。我们可以通过 Spy 中提供的 called
、calledOnce
、calledTwice
、calledThrice
等方法来统计该函数被调用的次数。
下面是一个简单的例子:
-- -------------------- ---- ------- --- --- - - ---- -------- --- -- - ------ - - -- - -- --- --- - ---------------- ------- ----------------- ---------------- ------------------------------------- --------------------------------------- ---
在这个例子中,我们同样是通过 chai.spy.on
来创建 Spy,然后在调用被 Spy 替代的方法后可以确认 add
函数的 called
方法返回值是否正确,以及它被调用了几次,是否传入了正确的参数。
- 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