javascript - 使用 supertest 和 Express JS 测试 next(err)

标签 javascript express supertest

在 Express 的路由或中间件中,您可以通过调用 next(err) 来跳过剩余的调用链,其中 err 是任何对象。从文档来看,这非常简单。

使用 SuperTest 进行测试时,似乎不支持此工作流程。中间件到 super 测试的唯一错误结果是响应上的文本设置为 [object Object]

例如:

const request = require('supertest');
const app = express();
app.use( (req, res, next) => next({ error: "ErrorCode" }) );
request(app).get('/')
  .expect(500)
  .end(function(err, res) {
    // err == undefined
    // res.text === '[object Object]'
  });

有没有办法使用 supertest 来验证传递给 next() 回调的对象?

我显然可以使用 sinon+chai 或 jasmine 来直接对代码进行单元测试,但我很好奇这是否可以通过 super 测试实现,甚至可以在可测试单元之后使用支持的定制中间件。

最佳答案

Supertest工作在HTTP响应级别,因此它只能根据HTTP消息检查响应本身的状态、 header 、正文。它无法检查有关express应用程序内部代码的javascript级详细信息(supertest实际上可以检查以任何语言编写的任意HTTP服务器,它只是有一些用于express的便利代码)。

因此,首先我会编写一个错误处理程序中间件来转换您的错误对象(实际上应该是 Error 实例而不是普通对象),设置正确的状态代码、内容类型、正文等.然后为这些属性建立 super 测试关联。

关于javascript - 使用 supertest 和 Express JS 测试 next(err),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39620073/

相关文章:

javascript - Sequelize : relations in both directions needed?

node.js - 如何用 super 测试检查不存在的头字段?

javascript - 如何继承这个javascript函数

javascript - Node 服务器接收文件上传作为字符串 : '[object ArrayBuffer]'

javascript - Dragula 计算出排序顺序 - 如何禁用

javascript - 如何处理与所有其他路线不同的一条快速路线

node.js - Supertest/Jest 检查 header 是否存在

javascript - 如何使用 supertest 和 jest 测试图像上传(流)?

javascript - TypeError : navigator. currentLang 不是函数

javascript - jQuery 替换表格中的内容