React 单元测试从入门到精通 (五)- Enzyme 的使用

阅读时长 8 分钟读完

React 单元测试从入门到精通 (五)- Enzyme 的使用

在前面的文章中,我们介绍了 React 单元测试的基础知识以及 Jest 的使用方法。本篇文章将着重介绍 Enzyme,它是一款 React 组件测试工具,可以完成 React 组件的渲染、断言和交互测试等功能。

一、Enzyme 简介

Enzyme 是由 Airbnb 开源的一个 React 组件测试工具,主要用于测试 React 组件的输出、状态和交互。Enzyme 提供了三个级别的测试输出,可以帮助我们更方便地测试 React 组件。它提供了浅渲染,全渲染和静态渲染三种方式,让我们可以在测试用例中更方便地获取组件的状态和输出。同时,Enzyme 还提供了一些检查器,可以更方便地检查组件的输出是否符合我们的预期。

二、Enzyme 安装

Enzyme 的安装非常简单,只需要在项目的根目录中执行以下命令:

在进行测试之前,需要对 Enzyme 进行配置。在项目的根目录中,创建一个名为 setupTests.js 的文件,并添加如下内容:

三、Enzyme 的使用方式

  1. 浅渲染

浅渲染是 Enzyme 提供的一种测试方式,它用于测试组件的输出,但并不会渲染组件的子组件。浅渲染可以帮助我们快速测试组件的属性和状态,而不必担心它的子组件是否也被正确渲染。

下面是一个简单的例子,假设我们有一个 Hello 组件,它接受一个名字作为参数,并输出 Hello,name:

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

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

------ ------- ------
展开代码

我们可以使用 Enzyme 来测试这个组件的输出,如下所示:

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

---------------- ---- -- -- -
  ----------- --- ------- ------ -- -- -
    ----- ------- - -------------- ------------ ----
    -------------------------------------- ---------
  ---
---
展开代码

代码中首先使用了 shallow 方法来渲染 Hello 组件,然后使用 text 方法获取组件的输出,最后使用断言判断输出是否符合预期。

  1. 全渲染

全渲染是 Enzyme 提供的另一种测试方式,它会渲染整个组件树,包括子组件。全渲染可以帮助我们测试组件的交互以及子组件的渲染情况。

下面是一个简单的例子,假设我们有一个 Counter 组件,它包含一个计数器和两个按钮,可以实现增加和减少计数器的功能:

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

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

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

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

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

------ ------- --------
展开代码

我们可以使用 Enzyme 来测试这个组件的交互,如下所示:

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

------------------ ---- -- -- -
  -------------- --- ---------- --- ------- -- -- -
    ----- ------- - -------------- ----
    -------------------------------------------------- ----
    -----------------------------------------------
    -------------------------------------------------- ----
    -----------------------------------------------
    -------------------------------------------------- ----
  ---
---
展开代码

代码中首先使用了 mount 方法来渲染 Counter 组件,然后使用 find 方法找到按钮,并使用 simulate 方法模拟按钮的点击事件,最后使用断言判断计数器是否正确增加和减少。

  1. 静态渲染

Enzyme 还提供了一种叫做 render 的静态渲染方式,它类似于全渲染,但它只会渲染组件的静态输出,不会包含交互逻辑。静态渲染可以帮助我们进行快速渲染测试,并且不需要考虑组件的交互逻辑。

下面是一个简单的例子,假设我们有一个 List 组件,它接受一个数据列表作为参数,并输出一个列表:

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

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

------ ------- -----
展开代码

我们可以使用 Enzyme 来测试这个组件的静态输出,如下所示:

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

--------------- ---- -- -- -
  ----------- --- ------- ------ -- -- -
    ----- ----- - ------ --- ----- --- ----- ----
    ----- ------- - ------------ ------------- ----
    ------------------------------------------------------
    -------------------- ------ -- -
      ----------------------------------------------------------
    ---
  ---
---
展开代码

代码中首先使用了 render 方法来渲染 List 组件,然后使用 find 方法找到列表项,并使用断言判断列表项是否正确渲染。

四、Enzyme 的检查器

Enzyme 提供了一些检查器,可以帮助我们更方便地检查组件的输出是否符合预期。下面是 Enzyme 的一些常用检查器:

  1. exist 和 length

exist 检查器用于判断元素是否存在,length 检查器用于判断元素数量是否符合预期。下面是一个例子:

  1. text 和 html

text 检查器用于获取元素的文本内容,html 检查器用于获取元素的 HTML 内容。下面是一个例子:

  1. prop

prop 检查器用于判断组件的属性是否符合预期。下面是一个例子:

  1. state

state 检查器用于判断组件的状态是否符合预期。下面是一个例子:

五、总结

本篇文章介绍了 Enzyme 的基本用法和检查器,希望对你对 React 单元测试有所帮助。在实际的开发中,通过良好的单元测试可以帮助我们更快速地发现和修复 bug,也可以增强代码的可维护性和可读性。祝愿大家越来越熟练掌握 React 单元测试技术,为自己、为团队、为产品带来更好的价值。

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

纠错
反馈

纠错反馈