在 React 组件中使用 Enzyme 时如何渲染包裹在 Link 中的组件

React 是一款流行的前端框架,Enzyme 是用于 React 的 JavaScript 测试实用程序库。它提供了一种用于编写易于阅读和可维护测试的方式。

在 React 组件中,某些组件可能包裹在 Link 组件中(通常使用 react-router-dom 库实现)。这可能会导致 Enzyme 无法正确渲染组件,并且在测试过程中会出现问题。本文将深入研究如何解决这个问题。

Link 组件

首先,让我们了解一下 Link 组件。Link 是 react-router-dom 库中的一部分,它提供了一种将应用程序导航到不同视图的方法。Link 标签中通常包含一个 to 属性,指向目标视图的路径。

例如:

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

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

Enzyme

Enzyme 是一个流行的 JavaScript 测试实用程序库,可用于测试 React 应用程序的渲染和交互。它提供了一种易于阅读和撰写的测试代码,可以轻松维护。

下面是如何使用 Enzyme 测试组件的示例:

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

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

在上面的代码中,我们将 MyComponent 组件包装在 shallow 中,并通过 expect 语句与快照进行比较。

然而,当我们的组件包裹在 Link 组件中时,使用上述测试代码通常会失败。

包裹在 Link 中的组件渲染问题

让我们看一下一个包裹在 Link 中的组件:

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

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

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

我们尝试使用上面的测试代码测试这个组件:

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

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

这将失败,因为 Enzyme 无法正确渲染 Link 组件内部的组件。

解决方法

为了解决这个问题,我们可以使用 mount 代替 shallow,以允许 Enzyme 在 Link 组件内部正确渲染组件。但是,这可能会带来一些性能问题。因此,我们应该仅在必要时使用 mount。

我们也可以使用第三方库 enzyme-to-json,将 Enzyme 包装器输出转换为 JSON,以便进行比较。

这里是解决方法的示例代码:

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

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

在上面的代码中,我们使用 mount 而不是 shallow 将 MyComponent 组件包装起来,并使用 enzyme-to-json 库将其输出转换为 JSON,以便进行比较。最后,我们在测试结束时卸载封装器。

结论

在 React 组件中使用 Enzyme 时,如果组件包裹在 Link 内部,则可能会遇到渲染问题。我们可以通过使用 mount 代替 shallow,以便在必要时正确渲染这些组件。我们还可以使用 enzyme-to-json 库来将输出转换为 JSON,以便进行比较。

针对特定问题进行选择,可以提高我们的测试质量并加速开发进度。这是一个很好的习惯,鼓励更好的编写测试代码和更好地理解 React 和 Enzyme。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67356a0b0bc820c5824e4e1a