React 单元测试 - Jest+Enzyme(持续更新)

阅读时长 9 min read

介绍

在前端开发中,进行单元测试可以有效地提升代码的可靠性、可维护性,并降低代码出错的概率。React 是一套非常受欢迎的前端开发框架,而 Jest 和 Enzyme 是两个常用的 React 单元测试工具。在本文中,我们将会详细的介绍 Jest 和 Enzyme 这两个工具,并且通过实例代码进行演示。

Jest

什么是 Jest

Jest 是 Facebook 推出的一个开源的 JavaScript 单元测试框架。Jest 可以帮助我们对代码进行测试,并且提供了完整的测试环境和丰富的 API 接口,拥有简单易用、速度快、丰富的功能特性等优点。

安装 Jest

我们可以通过 npm 全局安装 jest:

也可以通过项目内安装:

Jest 配置文件

我们可以通过 package.json 文件中的 jest 属性来配置 Jest:

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

这里我们对一些常用的配置进行了说明:

  1. moduleFileExtensions:测试文件支持的文件扩展名。
  2. moduleDirectories:测试文件搜索的目录,这里我们指定了 node_modules 和 src 目录。
  3. moduleNameMapper:用于指明一些需要 mock 的文件。
  4. transform:将测试文件转化成 Jest 可以识别的格式。
  5. setupFilesAfterEnv:在每个测试文件运行之前,执行的文件。

Jest 测试脚本

下面是一个简单的 Jest 测试脚本:

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

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

我们可以使用 describe 函数来定义一组测试,使用 test 函数来定义一个测试用例。在这个例子中,我们测试了两个加法的算式是否正确。

Jest 常用断言

Jest 提供了各种各样的断言方法,这里我们列出了一些常用的断言方法:

  1. toBe(expected):判断实际值是否等于期望值。
  2. toEqual(expected):判断实际值与期望值是否相等。
  3. toBeNull():判断实际值是否为 null。
  4. toBeUndefined():判断实际值是否为 undefined。
  5. toBeDefined():判断实际值是否已定义。
  6. toBeTruthy():判断实际值是否为 true。
  7. toBeFalsy():判断实际值是否为 false。
  8. toContain(expected):判断实际值中是否包含期望值。
  9. toMatch(regexp):判断实际值是否匹配正则表达式。
  10. toThrow(error):判断实际值是否抛出指定的错误。

Enzyme

什么是 Enzyme

Enzyme 是由 Airbnb 提供的一个 React 组件测试工具。它提供了一套简单的 API 来操作 React 组件,并且支持多种渲染方式以及完善的断言机制,可以让我们方便地对 React 组件进行测试。

安装 Enzyme

我们可以通过 npm 安装 Enzyme:

需要注意的是,在使用 Enzyme 之前,还需要安装相应的 Adapter:

Enzyme 配置

我们需要在测试文件中引入 Enzyme,并对其进行一些基本的配置:

这里我们引入了三个渲染组件的函数:shallow、mount 和 render。需要注意的是,在使用之前也需要引入 React 库。

Enzyme 测试脚本

下面是一个使用 Enzyme 测试 React 组件的例子:

这里我们对一个名为 MyComponent 的 React 组件进行了测试。我们使用 shallow 函数来渲染 MyComponent 组件,并在期望的结果中查找到了 “Hello, world!” 文字。

Enzyme 常用方法

Enzyme 提供了各种各样的方法来测试 React 组件,这里我们列出一些常用的方法:

  1. shallow(node[, options]):渲染组件,并返回浅层包装器。
  2. mount(node[, options]):渲染组件,并返回完整包装器,返回结果为一个 React 组件。
  3. render(node[, options]):渲染组件,并返回纯 HTML,返回结果为字符串。
  4. exists(selector):判断包装器中是否存在指定的 DOM 节点或者组件。
  5. find(selector):根据选择器查找包装器中的节点。
  6. prop(key):返回 props 中指定 key 的值。
  7. state([stateKey]):返回组件状态。
  8. simulate(event[, eventData]):模拟指定的事件,常用于测试用户交互行为。

示例代码

下面是一个使用 Jest 和 Enzyme 进行测试的示例代码:

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

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

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

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

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

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

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

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

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

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

在这个例子中,我们测试了一个 Header 组件,用于显示一个博客网站的标题和导航菜单。我们使用了 Jest 和 Enzyme 两个工具,分别对组件的渲染、文字内容以及导航菜单等进行了测试。

结语

Jest 和 Enzyme 是两个非常好用的 React 单元测试工具,能够帮助我们有效地提升代码质量。希望本文对大家学习 Jest 和 Enzyme 有所帮助。

Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67806596ce7f48612539b129

Feed
back