Jest 是一个非常流行的前端测试框架。它提供了强大的断言库和测试运行器,可以轻松地编写和运行各种类型的测试。 Sinon 是一个用于 JavaScript 测试的工具库,它提供了很多方便的工具来模拟和测试函数和对象的行为。在 Jest 中使用 Sinon 是一种很好的方法来增强测试的能力。本文将介绍如何在 Jest 测试中使用 Sinon,并提供一些最佳实践和示例代码。
安装 Sinon
在 Jest 中使用 Sinon,首先需要安装它。可以通过 npm 进行安装:
--- ------- ----- ----------
Sinon 的基础用法
在编写 Jest 测试的时候,通常需要模拟和测试一些对象和函数的行为。 Sinon 提供了很多工具来实现这些目标。下面是一些常见的 Sinon 工具:
存根 (Stubs)
存根使您能够更改函数的行为,以便在测试中提供预期的输出。 Sinon 提供了几种不同的存根类型:
方法存根
方法存根用于替换对象的方法。例如,假设要测试一个名为 doSomething 的函数,这个函数依赖于另一个名为 getUser 的函数:
-------- --------- - -- ------- - -------- ------------- - ----- ---- - ---------- -- --- -
为了测试 doSomething 函数,我们可以使用 Sinon 存根 getUser 函数:
----- -------- - ---------------------- ----- ------ --- ------------------ ------------------------------- -- -- ------- ------ ----- ------- ----- ---- - ---------- ------------------ -- - ----- ------ -
属性存根
属性存根用于替换对象的属性值。例如,假设有一个名为 config 的全局对象,其中包含要使用的常量值:
----- ------ - - ------- ---------------------- ------- --------- --------- --- --
为了测试依赖于这些常量的函数,我们可以使用 Sinon 存根来模拟这些值:
----- ---------- - ------------------ -------------------------------------------- -- -- ------------- -------- --------------------------- -- ------------------------
模拟 (Mocks)
模拟用于确保函数按预期的方式调用,并返回预期的结果。例如,假设有一个名为 submitOrder 的函数,它依赖于一个名为 sendEmail 的函数。在测试 submitOrder 函数时,我们可以使用一个 Sinon 模拟对象来确保 sendEmail 被正确地调用:
----- ------------- - ------------- ------------------------------------- -------------- -----------------------
间谍 (Spies)
间谍是一种特殊的 Sinon 存根,用于记录函数被调用的信息。例如,假设有一个名为 logMessage 的函数,我们可以使用 Sinon 间谍来记录调用次数和参数:
----- ------ - ------------ ------------ ---------- ------------------------------ -- - -------------------------------------- -- ----- --------
计时器 (Timers)
计时器是一个用于模拟异步代码的 Sinon 工具。它允许您使用 setTimeout 和 setInterval,以控制测试中异步代码的调用方式:
---------------------- ------------- -- - ----------------------- -- ------ ----------------------- -- --------- -----
将 Sinon 与 Jest 集成
集成 Sinon 到 Jest 的过程非常简单。Jest 会自动提供全局 jest.fn() 函数来模拟函数,并且可以通过修改全局变量来模拟对象。可以使用 Sinon 提供的工具来增强 Jest 的能力。
使用 Sinon 存根
在 Jest 测试中使用 Sinon 存根非常简单。只需要使用 jest.spyOn() 函数来创建一个 Jest 存根对象,并使用 Sinon 存根定义预期的行为:
------ ------- ---- ------------ ------------------- -- -- - ---------- ---- --------- ------ ---- ------- ----- -- -- - ----- ------------- - ---------------------- ----- ------ --- ----- ------- - --- ---------- -- - ------- ------- ----- ------------ - ------------------- ------------- -- ----------- ----------------------------------------------- ---------------------- ---------------------------------------- --- ---
使用 Sinon 模拟
在 Jest 测试中使用 Sinon 模拟也非常简单。只需要将 Sinon 模拟对象传递给 jest.fn() 函数,即可创建一个 Jest 模拟对象:
------ ------- ---- ------------ ------ ------------ ---- ----------------- ------------------- -- -- - ---------- ---- ----------------- ------ ---- ---------- ------- -- -- - ----- ---------------- - -------------- ---------------- ---------------------------------------- ----- ------- - --- -------------------------- ---------------------- -------------------------- --- ---
使用 Sinon 间谍
在 Jest 测试中使用 Sinon 间谍也非常简单。只需要使用 jest.fn() 函数在测试中创建一个 Jest 间谍对象,并使用 Sinon 间谍记录函数的调用:
------ ------- ---- ------------ ------------------- -- -- - ---------- ---- --- ------ ---- ----------- -- -------- -- -- - ----- ------ - ------------ ----- ------- - --- ---------------- ---------------------- ---------------------------------- --- ---
使用 Sinon 计时器
在 Jest 测试中使用 Sinon 计时器也非常简单。只需要使用 jest.useFakeTimers() 函数启用 Sinon 计时器,并在测试中使用 Sinon.clock.tick() 函数来模拟时间的推移:
------ ------- ---- ------------ ------------------- -- -- - ---------- ---- ----- ------ ----- - -------- -- -- - ----- -------- - ------------ ----- ------- - --- ------------------ --------------------- --------------------- -------------------- ------------------------------------ --- ---
结论
在 Jest 测试中使用 Sinon 可以提供很多有用的工具来模拟和测试应用程序的行为。使用 Sinon 的存根、模拟、间谍和计时器功能可以大大增强 Jest 的能力,使其更容易编写和维护测试代码。在使用 Sinon 时,请确保遵循最佳实践,以获取最佳的测试结果。希望本文对您有所帮助,看到这里时您已经可以在 Jest 中使用 Sinon 了。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67204dd32e7021665e019ce7