初入 React+Redux:使用 Jest + Enzyme 为你的 React 项目添加自动化测试

阅读时长 9 分钟读完

React 是一种流行的 JavaScript 库,用于构建用户界面。Redux 是一个用于管理应用程序状态的库。这两个库的结合使用,可以创建高效、可维护的 Web 应用程序。但是,为了确保这些应用程序的质量和可靠性,我们需要添加自动化测试。

在本文中,我们将介绍如何使用 Jest 和 Enzyme 来为你的 React+Redux 项目添加自动化测试。

为什么需要自动化测试?

自动化测试是一种软件测试方法,可以在编写代码时或代码修改后自动运行测试。它可以检测代码中的错误,并确保代码在修改后仍然按预期工作。自动化测试还可以节省时间和资源,因为它可以在短时间内运行大量测试。

对于 React+Redux 项目,自动化测试可以帮助我们:

  • 确保应用程序的质量和可靠性
  • 确保组件按预期渲染
  • 确保 Redux 状态管理的正确性
  • 确保应用程序的行为符合预期

Jest 和 Enzyme 简介

Jest 是一个由 Facebook 开发的 JavaScript 测试框架,它专门用于测试 React 应用程序。它具有易于使用的语法、快速的运行速度和强大的功能。

Enzyme 是一个由 Airbnb 开发的 JavaScript 测试实用程序。它提供了一组用于测试 React 组件的 API,可以模拟组件的渲染、交互和状态。

结合使用 Jest 和 Enzyme,可以轻松地为 React+Redux 项目添加自动化测试。

安装 Jest 和 Enzyme

在开始之前,请确保已经安装了 Node.js 和 npm。然后,使用以下命令安装 Jest 和 Enzyme:

  • jest:Jest 测试框架
  • enzyme:Enzyme 测试实用程序
  • enzyme-adapter-react-16:适配器用于将 Enzyme 与 React 16 兼容

编写测试用例

在我们编写测试用例之前,让我们先创建一个简单的 React+Redux 应用程序。我们将创建一个名为 Counter 的组件,它将显示一个计数器和两个按钮,用于增加和减少计数器的值。我们还将使用 Redux 来管理计数器的状态。

首先,我们需要安装 React 和 Redux:

然后,我们创建一个名为 Counter 的组件:

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

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

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

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

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

这个组件将从 Redux 状态管理器中获取 count 的值,并将其显示在 h1 元素中。它还将呈现两个按钮,用于增加和减少计数器的值。当这些按钮被点击时,它们将分别调用 increment 和 decrement 函数。

现在,我们需要创建一个名为 actions.js 的文件,其中包含以下内容:

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

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

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

这个文件导出了两个常量 INCREMENT 和 DECREMENT,以及两个函数 increment 和 decrement。这些函数将返回一个包含 type 属性的对象,以指示 Redux 应该执行哪个操作。

最后,我们需要创建一个名为 reducers.js 的文件,其中包含以下内容:

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

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

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

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

这个文件导出了一个 counterReducer 函数,它接收一个状态对象和一个操作对象,并返回一个新的状态对象。根据操作对象的类型,它将增加或减少 count 属性的值。

现在,我们已经创建了一个简单的 React+Redux 应用程序。接下来,我们将编写测试用例来测试它。

创建一个名为 Counter.test.js 的文件,并添加以下内容:

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

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

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

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

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

这个文件导入了 React、Enzyme 的 shallow 函数和 Counter 组件。我们使用 describe 函数来组织测试用例,并使用 it 函数来编写单个测试用例。

第一个测试用例测试组件是否正确渲染。我们使用 shallow 函数来创建组件的浅渲染,并使用 expect 函数和 toMatchSnapshot 函数来测试组件是否与预期的快照匹配。

第二个测试用例测试组件是否正确显示计数器的值。我们使用 shallow 函数来创建组件的浅渲染,并使用 find 函数和 text 函数来获取 h1 元素中的文本。然后,我们使用 expect 函数和 toEqual 函数来测试文本是否与预期的值匹配。

第三个测试用例测试组件是否在单击 + 按钮时调用 increment 函数。我们使用 jest.fn 函数来模拟 increment 函数,并将其作为 props 传递给组件。然后,我们使用 find 函数和 at 函数来获取 + 按钮,并使用 simulate 函数来模拟单击事件。最后,我们使用 expect 函数和 toHaveBeenCalled 函数来测试 incrementMock 函数是否被调用。

第四个测试用例测试组件是否在单击 - 按钮时调用 decrement 函数。我们使用 jest.fn 函数来模拟 decrement 函数,并将其作为 props 传递给组件。然后,我们使用 find 函数和 at 函数来获取 - 按钮,并使用 simulate 函数来模拟单击事件。最后,我们使用 expect 函数和 toHaveBeenCalled 函数来测试 decrementMock 函数是否被调用。

运行测试

现在,我们已经编写了测试用例。接下来,我们将使用 Jest 来运行这些测试。

在 package.json 文件中,添加以下内容:

然后,在终端中运行以下命令:

Jest 将运行测试用例,并显示测试结果。如果所有测试用例都通过,你将看到一条消息:

如果有任何测试用例失败,Jest 将显示详细的错误消息,以帮助你确定问题所在。

总结

在本文中,我们介绍了如何使用 Jest 和 Enzyme 为 React+Redux 项目添加自动化测试。我们创建了一个简单的计数器应用程序,并编写了四个测试用例来测试它的功能。我们还介绍了 Jest 和 Enzyme 的基本用法,并演示了如何运行测试。

自动化测试是一个重要的软件开发实践,可以提高代码质量和可靠性。使用 Jest 和 Enzyme,可以轻松地为 React+Redux 项目添加自动化测试,并确保应用程序按预期工作。

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

纠错
反馈