如何在 Mongoose 中使用 Jest 进行测试

在 Node.js 中,测试是保证代码质量和可靠性的关键步骤。而在前端领域,Mongoose 是一个非常流行的 MongoDB 驱动程序。在本文中,我们将探讨如何在 Mongoose 中使用 Jest 进行测试,以确保您的应用程序运行顺利。

什么是 Jest

Jest 是 Facebook 基于 Jasmine 创建的一个开源的 JavaScript 测试框架。它使用给定的预期和实际结果来测试代码,然后为您输出结果。Jest 提供了一系列非常强大的测试功能,如匹配器和快照测试等,它可以帮助开发人员更加轻松地编写和维护测试用例。

Jest 的配置

首先,您需要为 Jest 进行基本的配置。在 package.json 文件中,您可以添加一个名为 "jest" 的属性来配置 Jest。

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

这里,我们定义了一些 Jest 的基本属性:

  • moduleFileExtensions:我们需要加载的模块文件扩展名
  • testRegex:测试文件的正则表达式
  • testEnvironment:运行测试的环境。在我们的例子中是 Node.js
  • coveragePathIgnorePatterns:需要忽略的覆盖范围,例如 node_modules 和 tests
  • coverageReporters:我们的测试报告需要使用的报告器

Jest 中的 MongoDB 连接

在使用 Jest 测试 Mongoose 时,我们需要为测试建立一个 MongoDB 数据库。我们可以使用 mongo-in-memory 库来创建一个临时的 MongoDB 数据库,但是由于它不稳定,所以我们不建议使用它。相反,我们建议使用 jest-mongodb 库,它可以在内存中运行一个 MongoDB 数据库,并为每个测试用例提供一个新的数据库实例。

在 package.json 文件中,添加 jest-mongodb 的依赖项:

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

然后,创建一个初始化文件,使用 jest-mongodb 提供的 setupFilesAfterEnv 来连接数据库。具体如下:

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

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

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

现在,我们可以在 Jest 的配置文件中添加 setupFilesAfterEnv 属性,并引用上面定义的文件,如下所示:

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

这里,我们使用 process.env.MONGO_URI 访问当前测试用例的数据库 URI。

测试模型

在 Mongoose 中,模型是我们通过定义模式来创建的结构化数据对象。我们将使用模型定义来测试模型的列举、创建、更新和删除行为。

在我们的例子中,我们将用几个模型来测试:

  • User:定义一个用户模型,包括用户名、电子邮件和密码。
  • Conversation:定义会话的模型,包括创建者用户、参与的用户和创建时间。
  • Message:定义消息的模型,包括发送者用户、消息文本、发送时间和所属的会话。
----- -------- - --------------------

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

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

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

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

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

测试用例

现在我们已经定义了模型,下一步是编写 Jest 测试用例。我们将编写一些测试用例,测试模型的列举、创建、更新和删除行为。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在这些测试用例中,我们测试了用户、会话和消息模型的创建、查找、更新和删除行为。我们使用了 Jest 提供的 expect 函数来断言期望结果是否等于实际结果,并在测试中使用 faker 库生成随机数据来模拟输入数据。

结论

在本文中,我们讨论了如何使用 Jest 测试 Mongoose 模型。我们开始探讨 Jest 的基本配置,然后利用 jest-mongodb 在内存中创建了一个 MongoDB 数据库。接下来,我们定义了几个模型以及相关测试用例,对模型的功能进行了测试。

通过使用 Jest,我们可以轻松地测试 Mongoose 模型的功能,以确保它们在应用程序中达到预期的行为。

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