处理使用 Chai.expect 在 Node.js 中测试 Express API 出现的错误

阅读时长 4 分钟读完

摘要

在进行 Node.js 后端开发时,单元测试是必不可少的。而使用 Chai.expect 在 Node.js 中测试 Express API 时,有时会出现错误。本文将会详细介绍这些错误的原因及如何解决。

错误场景

先看一段示例代码:

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

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

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

这个测试用例看起来并没有什么问题,但是在执行时会报错:

这是因为在 Node.js 中,应用程序(app)没有 address 函数。而在上述测试用例中,我们使用了 chai.request(app) 这个语句来创建 request 对象。这个语句的执行会调用 app.listen(),因此在测试用例中 app 已经被修改为一个 server 对象。在后续的测试中,chai.request(app) 中的 app 就是这个 server 对象,而不是我们原本的应用程序对象。

另一个错误的场景是,当我们使用 chai-http 发送请求时,有时候会出现“请求超时”的错误:

这个错误的原因是请求超时了。在这种情况下,需要调整请求超时时间。

解决方法

解决第一个错误非常简单。我们只需要新建一个 app 实例,然后在测试用例中使用它就可以了。修改后的代码如下:

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

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

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

我们在测试用例之前新建了一个 app 实例,并在 before() 钩子中定义路由。这样,我们就可以在测试用例中使用这个 app 实例,而不会改变原有的 app 对象了。

解决第二个错误也比较简单。我们可以手动调整超时时间。修改后的代码如下:

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

我们在 chai.request(app) 方法链中添加了 .timeout(3000) 来手动设置超时时间。需要注意的是,如果实际请求的时间超过了这个时间,仍然会出现超时错误。

总结

本文介绍了使用 Chai.expect 在 Node.js 中测试 Express API 出现的两种错误,以及如何解决这些错误。通过本文的指导,你可以更加愉快地进行单元测试了。

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

纠错
反馈