Hapi 测试:指南和陷阱

阅读时长 7 min read

在前端开发中,测试是必不可少的一环,它可以大大减少代码出错的概率并提高代码质量。Hapi 是一款流行的 Node.js Web 框架,本文将介绍如何在 Hapi 中进行测试,并分享一些我在测试 Hapi 过程中趟过的坑。

测试框架

在 Hapi 中,可以选择使用任意一种 Node.js 测试框架,比如 MochaJestAVA 等。这里我们以 Mocha 为例。

首先安装 Mocha:

然后在 package.json 中配置测试脚本:

其中 test/setup.js 文件是用于初始化测试环境的,比如在该文件中可以配置环境变量、连接数据库等。src/**/*.spec.js 是测试文件的路径通配符,可以根据实际情况修改。

单元测试

在 Hapi 中,一般使用 Lab 进行单元测试,它是 Hapi 官方推荐的测试框架。特别是在测试路由和请求处理器时,Lab 非常方便。

首先安装 Lab:

然后编写一个 Hapi 路由:

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

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

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

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

test 目录下新建一个测试文件:

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

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

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

该测试文件首先导入 Lab 和 Code,然后导入我们编写的 Hapi 路由。在测试用例中,通过调用 server.inject() 方法模拟 HTTP 请求,然后对响应进行断言。

最后,在终端中执行 npm test 命令,即可运行测试。

集成测试

除了单元测试,还需要进行集成测试,用于验证整个应用的可用性以及各个组件之间的协作。

在 Hapi 中,可以使用 SuperTest 进行集成测试。

首先安装 SuperTest:

然后编写一个 Hapi 应用:

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

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

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

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

test 目录下新建一个测试文件:

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

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

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

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

该测试文件首先导入 Lab 和 Code,然后导入我们编写的 Hapi 应用。在测试用例中,通过调用 request() 方法模拟 HTTP 请求,然后对响应进行断言。

最后,在终端中执行 npm test 命令,即可运行测试。

陷阱

在测试 Hapi 的过程中,有一些坑需要注意。下面是我遇到的几个问题和解决方案。

使用 ESM

Hapi 17 以上版本已经采用了 ES6 模块化规范,但是很多测试工具还使用 CommonJS 规范,会导致无法加载模块。因此,我们需要使用 ESM 作为测试工具的运行时环境。

首先安装 ESM:

然后在 package.json 中配置测试脚本:

处理 JSON 和 FormData

在测试请求时,有时需要提交 JSON 或 FormData 数据,但是 SuperTest 默认使用 application/x-www-form-urlencoded 格式,需要手动设置 Content-Type

比如,下面是提交 JSON 数据的测试用例:

下面是提交 FormData 数据的测试用例:

处理文件上传

在测试文件上传时,无法直接使用 send() 方法,需要使用 attach() 方法。

比如,下面是上传图片的测试用例:

其中 attach() 方法接受两个参数,第一个参数是表单域名称,第二个参数是文件路径。

结语

通过本文的介绍,相信大家已经掌握了如何在 Hapi 中进行单元测试和集成测试,以及一些测试时需要注意的问题。希望本文能给大家带来帮助。

Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6780bd4ace7f4861254719b9

Feed
back