React + Jest + Enzyme 单元测试

阅读时长 10 分钟读完

在前端开发中,单元测试是不可或缺的一环。React 是一个流行的前端框架,而 Jest 和 Enzyme 是针对 React 的单元测试工具。本文将介绍如何使用 React、Jest 和 Enzyme 进行单元测试,包括测试 React 组件的状态、Props 和事件。

安装和配置

首先,需要安装 Jest 和 Enzyme。可以使用 npm 或 yarn 安装,如下所示:

或者

Jest 和 Enzyme 都需要配置,可以在项目根目录下创建一个 jest.config.js 文件,并添加以下内容:

其中,testEnvironment 指定了测试环境为 jsdom,moduleNameMapper 指定了 CSS 文件的处理方式,setupFilesAfterEnv 指定了测试文件执行前需要运行的文件。在项目根目录下创建一个 src/setupTests.js 文件,并添加以下内容:

这个文件用于配置 Enzyme 的适配器。

测试组件状态

首先,我们来测试一个简单的 React 组件的状态。假设我们有一个 Counter 组件,用于显示一个计数器和两个按钮,其中一个按钮用于增加计数器的值,另一个按钮用于减少计数器的值。组件的代码如下:

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

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

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

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

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

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

我们可以使用 Enzyme 的 shallow 方法来测试组件的状态。首先,在测试文件中导入 Counter 组件和 shallow 方法:

然后,编写测试代码:

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

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

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

在第一个测试中,我们断言组件的初始状态为 0。在第二个测试中,我们模拟用户点击 + 按钮并断言计数器的值是否增加了。在第三个测试中,我们模拟用户点击 - 按钮并断言计数器的值是否减少了。

测试组件 Props

接下来,我们来测试组件的 Props。假设我们有一个 UserInfo 组件,用于显示用户的信息,包括姓名、年龄和性别。组件的代码如下:

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

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

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

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

我们可以使用 Enzyme 的 shallow 方法来测试组件的 Props。首先,在测试文件中导入 UserInfo 组件和 shallow 方法:

然后,编写测试代码:

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

在这个测试中,我们断言组件渲染后是否正确显示了传入的 Props。

测试组件事件

最后,我们来测试组件的事件。假设我们有一个 LoginForm 组件,用于用户登录,包括用户名和密码两个输入框和一个登录按钮。组件的代码如下:

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

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

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

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

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

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

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

我们可以使用 Enzyme 的 mount 方法来测试组件的事件。首先,在测试文件中导入 LoginForm 组件和 mount 方法:

然后,编写测试代码:

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

在这个测试中,我们模拟用户输入用户名和密码,并模拟用户点击登录按钮。然后,我们断言 window.alert 方法是否被正确调用。

总结

本文介绍了如何使用 React、Jest 和 Enzyme 进行单元测试,包括测试组件的状态、Props 和事件。单元测试可以帮助我们提高代码质量和可维护性,建议在开发过程中养成编写单元测试的习惯。完整的示例代码可以在 GitHub 上查看。

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

纠错
反馈