Enzyme 中如何处理子 React 组件

阅读时长 9 分钟读完

在 React 开发中,我们经常使用 Enzyme 这个库来进行组件测试。在测试过程中,涉及到了对于子组件的处理,那么本文将会详细介绍 Enzyme 中如何处理子 React 组件。

常用 API

Enzyme 有三种常用的 API:find()shallow()mount()

find()

find() 用于查找指定的选择器,并返回一个新的包含了所有匹配元素的 Enzyme 对象。这个 API 可以用来遍历一个已有的 Enzyme 对象,查找匹配的元素,其返回值为一个新的 Enzyme 对象。如:

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

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

shallow()

shallow() 用于浅化渲染 React 组件,无需渲染出完整的 DOM 层次结构。这个 API 会只渲染组件的直接子组件,返回值也是一个新的 Enzyme 对象。如:

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

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

mount()

mount() 用于完整渲染 React 组件及其子组件,渲染出完整的 DOM 层次结构。这个 API 会让组件及其所有子组件都被完整地挂载到 DOM 上,可以进行后续的 DOM 操作,返回值也是一个新的 Enzyme 对象。如:

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

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

子组件查找

Enzyme 中,通过 find() 可以查找子组件。当然,这是需要指定子组件的选择器,可以通过 className、id、标签名或其他一些属性进行匹配。

通过 className 查找

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

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

通过 id 查找

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

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

通过标签名查找

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

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

通过属性查找

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

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

以上示例代码,可以帮助我们更准确且方便的定位子组件,在测试中避免选择器出错的情况发生。

子组件模拟

Enzyme 不仅可以查找子组件,我们还可以使用 Enzyme 的实例对象模拟子组件的 props 和状态,以便进行组件测试。例如,我们有一个组件 ParentComponent,其中包含了一个子组件 ChildComponent

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

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

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

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

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

那么我们可以使用 Enzyme 实例对象来模拟 ChildComponent 组件,设定其 props 和状态,以便单元测试:

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

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

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

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

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

总结

Enzyme 提供了方便多样的 API,可以帮助我们在 React 组件的测试中定位到子组件,并模拟所需的 props 和状态,更加准确地进行组件测试。培养熟练使用 Enzyme API 的能力,可以为我们的开发工作提供极大的便利。

希望本文的内容能够帮助您更好的了解 Enzyme 中的子组件操作,让您能够更加轻松地进行组件测试。

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

纠错
反馈