使用 Jest 测试框架测试 Express 如何等待异步请求

阅读时长 6 分钟读完

前言

在前端开发中,测试是非常重要的一环。其中,我们需要对后端 API 进行测试来确保其功能的正确性。而对于一些异步请求接口的测试,我们需要使用一些工具来等待其完成,以便我们进行断言验证。在本文中,我们将介绍如何使用 Jest 测试框架来测试 Express 的异步请求,并且演示一些实用的测试技巧。

安装 Jest 和 Express

在开始之前,我们需要先安装 Jest 和 Express。

其中,jest 是测试框架,supertest 是测试辅助工具,express 是我们需要测试的后端框架。

测试异步请求

在开始测试之前,我们需要准备一个简单的 Express 应用程序,用于测试异步请求。我们可以使用以下代码:

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

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

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

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

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

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

这个应用程序简单地提供了一个 /data 路径,该路径在 1 秒后返回一个 JSON 数据。

我们的测试用例需要测试这个路径是否能成功返回数据。

首先,我们需要创建一个测试用例文件,名称为 test.js

在这个文件中引入以下包:

其中,request 是一个提供了方便的 API 请求功能的第三方库,而 app 则是刚刚我们编写的 Express 应用程序。

接着,我们可以编写一个简单的测试用例:

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

在这个测试用例中,我们使用了 Jest 的 test 函数来定义一个测试。测试的名称是 "should return hello world"

在测试代码中,我们使用 requestget 方法发送一个 GET 请求,并且设置了一个期望值 expect(200),表示我们期望服务器可以正确地响应请求。

在调用 end 方法时,我们传递了一个回调函数 (err, res) => {...},在此回调函数中,我们对返回的数据进行了验证。

最后,我们通过调用 done() 函数告诉 Jest,这个测试已经完成。

这是一个非常简单的测试用例,但是我们可以看到,我们使用了 done() 函数来等待服务器返回数据后再进行断言验证。如果我们不等待服务器返回数据,那么测试用例很有可能会出现错误。

使用 async/await

如果您熟悉 TypeScript 或 ES6/ES7,那么您可能已经听说过 async/await。在 Jest 中,我们可以使用 async/await 来等待异步请求的完成。

以下是一个示例代码:

如您所见,我们只需要将测试用例的定义修改一下,加上 async 关键字,然后使用 await 关键字来等待异步请求的完成即可。

清理和 Mock

在实际的开发中,您可能经常会遇到需要在测试前对某些数据进行清理的情况。

对于这种情况,我们可以使用 Jest 提供的一些 API 来实现。例如,我们可以在测试用例的前后将数据库中所有数据清空:

在这里,我们使用了 beforeEachafterEach 函数来分别在测试用例之前和之后执行一些清理操作。在这个示例代码中,我们使用了 MongoDB 数据库,并在 beforeEach 函数中连接了数据库,在 afterEach 函数中清空了数据库中的所有数据。

除了清理数据外,在测试中还可能需要进行 Mock 操作,Mock 可以用来模拟一些行为,方便测试特定的场景。

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

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

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

在 Jest 中,我们可以使用 jest.fn() 来 Mock 一个函数。在本例中,我们使用了 jest.fn() 来模拟了 next 函数,然后对中间件函数的运行结果进行验证。

总结

在本文中,我们介绍了使用 Jest 测试框架来测试 Express 的异步请求的方法,并且演示了一些好用的测试技巧,包括使用 done() 函数、async/await 和清理、Mock 操作。

在日常开发中,测试是确保代码质量的重要方法。我们希望您能在测试中学到更多的东西,并且在日常开发中更加重视测试工作。

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

纠错
反馈