在 Mocha 测试框架中使用 Supertest 进行 HTTP API 测试

阅读时长 8 分钟读完

前言

随着前端领域的迅速发展,前后端分离架构成为现代 Web 开发的必备技能之一。HTTP API 短小精悍、灵活便捷的特点使其成为前后端分离的关键。而为了维持 API 的稳定性与可靠性,自动化测试则成为日常开发中不可或缺的一环。

在本文中,我们将介绍如何使用 Mocha 测试框架以及 Supertest 库进行 HTTP API 的自动化测试。

Mocha 测试框架介绍

Mocha 是一款使用 JavaScript 编写的测试框架,支持运行在 Node.js 和浏览器环境中。Mocha 提供了丰富的 API,使得我们可以轻松地编写测试用例,同时也可以方便的使用待测试代码中的异步操作。

Supertest 库介绍

Supertest 是一个为 Node.js 设计的 SuperAgent 基础之上的库,用于测试 HTTP API。使用 Supertest,编写测试代码的方式和编写普通的 HTTP 请求非常相似,同时也为我们提供了丰富的断言 API。

开始使用 Mocha 和 Supertest 进行 API 测试

在开始之前,我们需要安装 Mocha 和 Supertest 两个库:

接下来,我们可以创建一个 api.test.js 的测试文件进行测试。

在该测试文件中,我们需要先引入待测试的代码和 Supertest:

然后,在测试代码中,我们可以使用 describeit 两个 Mocha 提供的全局函数编写测试用例:

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

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

如上代码,describe 函数接收两个参数:测试用例的描述和测试用例的回调函数。回调函数中,我们使用 it 函数编写测试用例,接收两个参数:测试用例的描述和测试用例的实际操作。在该操作中,我们使用 request 函数进行 API 请求,同时使用 Supertest 提供的断言 API expect 来验证请求的正确性。最后,我们通过 end 函数告诉测试环境该测试用例已经执行完了。

给测试用例添加更多的断言

除了使用 expect 函数,我们也可以使用断言库来扩展测试用例中的断言。例如,我们可以使用 Chai 库的 assert API:

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

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

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

如上代码,我们在 end 函数的回调函数中使用 Chai 的 assert 函数进行相应的验证。

将测试用例与应用代码分离

当应用代码中的逻辑复杂程度增加时,测试用例也需要相应的增加与维护。为了方便复用测试用例,我们可以将测试用例与应用代码分离。在这种情况下,我们可以使用 supertest-session 库来创建一个会话,方便多个测试用例共享访问同一个服务器的能力。例如:

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

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

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

  -- ---

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

如上代码,我们在测试前先执行了一些同步操作,例如向用户表中增加一条记录,并在测试后删除用户表中对应的记录,从而避免对测试环境的破坏。同时,我们使用了 beforeafter 函数,让这些同步操作只会在测试前或测试后被执行一次,便于测试用例之间共享公共数据。

总结

本文介绍了如何使用 Mocha 测试框架以及 Supertest 库进行 HTTP API 的自动化测试。我们在测试代码中使用了丰富的断言 API,并将测试用例与应用代码分离,方便测试用例的复用与维护。相信本文对想要在前端领域进行 HTTP API 自动化测试的开发者们有所帮助。

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

纠错
反馈