npm 包 unexpected-snapshot 使用教程

阅读时长 9 分钟读完

前言

在软件开发过程中,测试是非常重要的一环。因为代码的正确性直接关系到用户的体验和系统的稳定性。而测试则可以帮我们发现和修复问题,确保代码的质量和可靠性。在 JavaScript 的前端开发领域,测试也是十分重要的一项工作。为了编写测试用例,我们需要一些工具和库来辅助我们。其中,提供快照测试的工具非常简便和高效,而其中一个可选择的工具是 npm 包 unexpected-snapshot 。

unexpected-snapshot 是一个基于 assert 模块的、支持快照测试的断言库。它提供了不少有用的特性,可以帮助我们编写简单而又高效的测试用例。本文将介绍 unexpected-snapshot 的用法和示例,以及它如何帮助我们编写更简单和高效的测试用例。

安装和使用

为了使用 unexpected-snapshot ,我们需要先安装它到我们的项目中。我们可以使用 npm 包管理工具来安装:

unexpected-snapshot 需要配合 unexpected 一起使用,所以我们需要一起安装它们。接下来,在测试文件中引入 unexpected 和 unexpected-snapshot :

接着,我们就可以使用 expect 断言语法来完成测试了。using() 方法告诉 expect 使用 unexpectedSnapshot 插件。我们将它添加到 expect 实例上,就可以愉快地享受快照测试了。

使用场景

快照测试通常被用于比较 DOM 的结构和输出,如 HTML、SVG、Canvas 元素等。想象一下,在我们编写复杂的组件时,我们需要检查组件产生的 HTML 是否符合预期。这种场景下,我们可以使用快照测试,对比组件渲染出来的 HTML 和预期的 HTML 是否一致。

基本用法

unexpected-snapshot 提供了 toMatchSnapshot 和 addSnapshotSerializer 两个方法。下面简单介绍一下它们的用法。

toMatchSnapshot

toMatchSnapshot 方法是快照测试的关键。它的作用是比较测试结果与预期是否匹配。执行 toMatchSnapshot 方法的同时,如果没有预期的快照,则会生成一个新的快照。如果已经存在预期的快照,则会将测试结果与预期的快照进行比较。如果测试结果和预期快照不符,则测试用例失败。

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

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

该测试用例将匹配 myObject 的快照。如果测试运行成功,它将生成一个名为“test matches the snapshot.snapshot”的文件,其中包含了 myObject 的快照。这个快照文件将用作下次执行测试时的预期值。

如果我们对 myObject 进行了更改,那么测试用例就会失败:

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

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

在这种情况下,我们将得到类似于以下的错误消息:

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

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

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

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

我们可以看到,测试失败了,并且输出了一个错误消息。在这个错误消息中,我们可以看到预期的快照与实际的测试结果之间的差异。这使得我们能够快速地发现问题,然后进行修复。

addSnapshotSerializer

有时候,预期值的格式和实际测试结果的格式是不同的。在这种情况下,我们需要自定义一个序列化器来将实际结果转换为预期值的格式。为此,unexpected-snapshot 提供了 addSnapshotSerializer 方法:

默认情况下,addSnapshotSerializer 将返回 undefined 。所以我们需要根据实际情况来编写适当的序列化器。

addSnapshotSerializer 方法接受一个序列化器函数。序列化器函数接受测试结果作为入参,并返回序列化后的数据。序列化后的数据将写入到快照文件中。

在上面的示例中,addSnapshotSerializer 的序列化器函数接受一个 obj 参数,并返回一个 representedProperties 属性。representedProperties 的值是一个数组,表示了哪些成员应该被写入到快照文件中。

同时,这个序列化器定义了一个新的快照格式。我们可以使用此新的格式来测试其他的应用程序。

示例代码

为了更好地理解 unexpected-snapshot 的用法,下面列举两个示例代码:

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

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

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

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

这是一个使用 unexpected-snapshot 来测试 Canvas 元素生成的新快照。

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

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

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

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

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

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

这个是使用 unexpected-snapshot 来测试计算器应用程序的新快照。

总结

本文介绍了 npm 包 unexpected-snapshot 的用法和示例。我们可以看到,unexpected-snapshot 提供了实现快照测试的关键方法 toMatchSnapshot 和 addSnapshotSerializer 。我们可以使用它们来检查实际测试结果是否与预期结果相符。该快照测试库由 assert 模块构建,易于使用和配置。它的快照测试用例通常用于测试 DOM 结构和其它可序列化对象的输出。在这种情况下,快照测试可以提供一个快速、简单和可靠的方法,以确保应用程序的正确性和稳定性。

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

纠错
反馈