React 浅析 —— 基于创建之初的自己编写一个组件 enzyme 单元测试

阅读时长 7 分钟读完

本文将介绍如何在 React 中使用 enzyme 进行单元测试。在本文中,我们将创建一个简单的组件并进行测试。

React 简介

React 是一个由 Facebook 开发的 JavaScript 库,用于构建用户界面。它将应用程序分解为可重用且可组合的组件,使代码更易于维护和协作。

React 支持客户端渲染和服务器端渲染,并且可以与许多不同的开发工具和框架集成。

enzyme 简介

enzyme 是一个 React 测试实用程序,它可以让您轻松地编写和运行测试用例,并且可以与大多数测试框架集成使用。enzyme 提供了一种简便的方式来搜索、遍历和操作 React 组件的输出。enzyme 支持三种渲染方式:浅渲染、完整渲染和静态渲染。

  • 浅渲染:只渲染组件的一层,可以模拟组件的渲染,并使测试更快。
  • 完整渲染:渲染全部子组件,并返回包含完整组件的虚拟 DOM。
  • 静态渲染:将 React 组件输出的 HTML 代码转换为静态字符串。

接下来我们将通过一个例子来演示如何使用 enzyme 进行测试。

创建一个组件

首先,让我们创建一个简单的 React 组件。在这个例子中,我们将创建一个包含输入框和按钮的组件。当用户单击按钮时,将会将输入框中的内容显示在屏幕上。

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

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

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

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

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

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

在这个组件中,我们使用了 useState 钩子来管理输入框的值,并使用 onButtonClick 属性来将输入框的值传递给父组件。我们将在测试中测试这个组件。

编写测试用例

下面我们将使用 Jest 测试框架和 enzyme 库来编写测试。

我们首先需要安装 Jest 和 enzyme 库和相关的包。在终端中执行以下命令:

我们需要使用 EnzymeAdapter,下面是相关的代码:

接下来,我们需要导入 React 组件和 Enzyme API:

我们将使用三种渲染方式对组件进行测试。

浅渲染

首先,我们将使用浅渲染进行测试。在这种情况下,我们只需要测试组件的一层,这将使测试更快。

我们将编写一个测试用例,在用例中,我们将传递一个包含值 "test" 的字符串作为输入,然后单击按钮,预期组件将该值显示在屏幕上。下面是测试代码:

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

在此测试中,我们首先创建了一个模拟函数,然后使用它来测试 onButtonClick 属性是否被调用,并测试组件是否将输入值正确地传递给该属性。

我们使用 shallow 函数来进行浅度渲染。使用 find 方法来查找输入框和按钮,并模拟更改和单击事件。最后,我们使用 expect 方法来断言组件是否输出了输入值,以及 onButtonClick 属性是否被调用。

完整渲染

接下来,我们将使用完整渲染方式对组件进行测试,这使我们可以测试组件包含的所有子组件。因此,我们可以确保组件正确地渲染和交互。

下面是完整渲染的测试代码:

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

在这个测试中,我们使用了 mount 函数,因此我们可以访问组件内部的所有子组件,并更真实地渲染组件。

静态渲染

最后是静态渲染测试,我们将测试组件直接输出静态 HTML 代码方式是否正确。在测试中,我们使用 .text() 方法来访问渲染的 HTML 代码。

下面是静态渲染的测试代码:

总结

在这篇文章中我们通过创建一个简单的 React 组件并使用 enzyme 进行单元测试的方式,介绍了如何使用 enzyme 进行 React 的单元测试。我们讲解了 enzyme 的三种渲染方式,以及如何编写测试用例来测试组件的交互和输出。

这篇文章的目的是介绍基础的单元测试,如果您想要深入了解 enzyme,您可以查看官方文档以获取更多信息。虽然单元测试并不能涵盖所有的程序错误,但它可以大大提高程序的可靠性和稳定性。我们希望本文可以帮助您开始编写 React 组件的单元测试。

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

纠错
反馈