npm 包 @testing-library/jest-dom 使用教程

阅读时长 6 分钟读完

介绍

在前端开发中,我们通常会写一些单元测试来确保代码在不同场景下的正确性。在进行单元测试时,我们经常需要对 DOM 对象做出断言。而 @testing-library/jest-dom 是在 Jest 中使用的 DOM 引用断言库。

@testing-library/jest-dom 提供了一些 API 来简化 DOM 断言的编写,让我们能够更加专注于测试场景本身。

安装

通过 npm 安装 @testing-library/jest-dom。

用法

引入

在测试文件中引入 @testing-library/jest-dom。

链式 API

@testing-library/jest-dom 提供了一系列的链式 API 用于进行 DOM 断言的编写。例如:

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

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

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

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

默认情况下,所有方法都是 case-insensitive 的。如果要强制执行大小写,则可以添加 I 标志。

匹配器

匹配器是可以对引用进行比较的函数。以下列出了一些常见的匹配器。

  • expect(el).toBeVisible(): 断言元素是否可见
  • expect(el).not.toBeVisible(): 断言元素是否不可见
  • expect(el).toBeEnabled(): 断言元素是否启用
  • expect(el).not.toBeEnabled(): 断言元素是否禁用
  • expect(el).toBeChecked(): 断言元素是否被选中
  • expect(el).not.toBeChecked(): 断言元素是否没有被选中
  • expect(el).toBeEmpty(): 断言元素是否为空
  • expect(el).not.toBeEmpty(): 断言元素是否不为空
  • expect(el).toBeInvalid(): 断言元素是否无效
  • expect(el).not.toBeInvalid(): 断言元素是否有效
  • expect(el).toBeRequired(): 断言元素是否需要输入
  • expect(el).not.toBeRequired(): 断言元素是否不需要输入
  • expect(el).toBeInTheDocument(): 断言元素是否在 document 中
  • expect(el).not.toBeInTheDocument(): 断言元素是否不在 document 中
  • expect(el).toBeInstanceOf(HTMLInputElement): 断言元素是否是 HTMLInputElement 的实例
  • expect(el).toHaveAttribute("id", "my-id"): 断言元素是否具有特定属性
  • expect(el).not.toHaveAttribute("disabled"): 断言元素是否没有特定属性
  • expect(el).toHaveClass("my-class"): 断言元素是否具有特定类名
  • expect(el).not.toHaveClass("is-active"): 断言元素是否没有特定类名
  • expect(el).toHaveStyle("color: red"): 断言元素是否具有特定样式
  • expect(el).not.toHaveStyle("padding: 10px"): 断言元素是否没有特定样式
  • expect(el).toHaveValue("my value"): 断言元素的值是否与特定值相等
  • expect(el).not.toHaveValue("my value"): 断言元素的值是否与特定值不相等

Tips

  1. 不要在测试中使用 document, window 等全局变量,而是使用 jsdom 提供的全局变量。
  2. 使用 jest-extend 可以轻松地添加自定义的断言方法。

示例

一个简单的 Vue.js 组件测试

下面是一个简单的 Vue.js 组件测试示例。

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

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

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

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

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

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

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

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

总结

性能优化是前端开发常常要面临的问题,而追求良好的用户体验则更加吸引人。为了保证代码的质量,我们需要编写并执行各种类型的自动化测试。@testing-library/jest-dom 提供了一组便于使用的 DOM 断言 API,可以在测试中简化我们的工作,这带来了进一步的自动化程度和代码质量的提高。

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