解决使用 Enzyme 测试 React 组件时遇到的 "shallow(…).not is a function" 问题

阅读时长 4 分钟读完

在进行 React 组件测试的时候,我们通常会选择使用 Enzyme 这一库。但有时候,我们在使用 shallow() 方法时会遇到一个奇怪的错误,如下所示:

这个错误常常会在使用 Jest 进行测试时出现。下面,我们将深入探讨这个问题,并提供解决方法。

问题探究

首先,我们需要了解这个错误的原因。事实上,这个错误是由于 Jest 中的一个特性引起的。具体来说,Jest 在全局范围内重新定义了浏览器的一些关键方法,例如 document 和 setTimeout,以便使测试更加准确。

然而,这也导致了一些问题,例如在某些情况下,Jest 对对象原型的定义会与 Enzyme 冲突。就像我们在使用 shallow() 方法时所见到的那样。

解决方法

幸运的是,我们可以通过添加一个单元测试配置文件来解决这个问题,而不是每次都在测试代码中手动修复它。

我们可以创建一个名为 jest.config.js 的文件,并添加以下代码:

这里,setupFilesAfterEnv 属性是 Jest 配置文件中的一个属性,可以指定在所有测试运行之前需要运行的脚本。我们使用这个属性来指定一个名为 jest.setup.js 的文件。

接下来,我们需要在 jest.setup.js 文件中添加以下代码:

这些代码将告诉 Jest 和 Enzyme 使用 React 16 版本的适配器进行测试,并解决我们在使用 shallow() 方法时遇到的问题。

示例代码

以下是一个简单的 React 组件测试示例,包括使用 Enzyme 和 Jest,并解决了 shallow() 方法问题:

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

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

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

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

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

另外,为了完整性和方便,以下是 Counter 组件的代码:

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

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

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

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

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

结论

通过这篇文章,我们学习了如何解决使用 Enzyme 测试 React 组件时遇到的 "shallow(…).not is a function" 问题。这个问题是由 Jest 中的一个重要特性引起的,但我们可以通过添加 jest.config.js 文件和 jest.setup.js 文件来解决它。这个解决方案确保了测试的准确性和可靠性,并可以帮助我们更好地理解 React 组件的测试和优化。

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

纠错
反馈