如何在 Jest 测试中使用 Snapshot 测试 React 组件

阅读时长 6 分钟读完

Jest 是一个流行的 JavaScript 测试框架,它支持多种测试方式,包括一种称为 snapshot 测试的快照测试。在 React 开发中,我们可以使用 snapshot 测试来测试组件是否按预期渲染和输出。

什么是 Snapshot 测试

快照测试又称为基准测试。它是一种自动化测试,通过将组件的输出与预期快照进行比较来验证组件的行为是否正确。在 Jest 中,快照是一个序列化的输出,它包含组件的状态和组件的 DOM 结构。在每次运行测试时,Jest 会将组件的输出与预期快照作比较,如果有差异就会提示我们。

在 React 中,我们可以使用 Jest 来创建快照测试。我们只需输出组件的标记,将其保存为一个快照文件,然后在测试中将输出与快照进行比较。

快速开始

首先,我们需要安装 Jest:

然后,我们需要创建一个测试文件,例如 Example.test.js。在这个文件中,我们需要创建一个测试用例,描述我们要测试的组件。例如:

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

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

在这个测试中,我们使用 Jest 中的 expect(tree).toMatchSnapshot(); 来检查组件的输出是否与快照匹配。如果输出与快照不匹配,Jest 将会提示我们。

然后,我们需要运行 Jest,在控制台中输入:

这将运行所有测试,包括我们刚刚编写的测试。我们会收到一个类似如下的提示:

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

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

-----------

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

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

这个提示告诉我们,组件的输出与快照不匹配。在这个例子中,我们只需更新快照,然后再次运行测试。

进阶用法

当我们需要测试包含动态内容的组件时,我们需要使用快照测试的高级用法。

例如,我们的组件包含一个从外部获取数据的异步操作。我们需要模拟这个异步操作,并在组件渲染完成后输出快照。

首先,我们需要安装 axios,用于模拟异步操作:

然后,我们可以创建一个模拟的异步操作:

在我们的组件中,我们可以使用 getData 函数来获取数据,并在渲染完成后输出快照:

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

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

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

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

最后,我们需要更新测试代码,以便等待异步操作完成并输出快照:

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

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

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

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

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

在这个测试中,我们使用了 axios-mock-adapter 来模拟异步操作。我们使用 await new Promise(resolve => setTimeout(resolve, 1000)); 来等待异步操作完成。

现在,我们可以运行测试,它会等待异步操作完成并输出快照。

结论

在 React 开发中,使用 Jest 和快照测试是一个强大且方便的测试工具。它可以帮助我们检查组件是否正确渲染,同时避免了手动编写大量的测试代码。

在使用快照测试时,我们需要注意以下事项:

  1. 我们需要创建一个测试用例来描述要测试的组件。
  2. 测试输出应与预期快照匹配。如果不匹配,Jest 将会提示我们。
  3. 在测试输出包含动态内容的组件时,我们需要使用高级测试用法,并等待异步操作完成。

希望本文可以帮助你更好地使用 Jest 和快照测试。完整的代码示例可以在 GitHub 上找到。

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

纠错
反馈