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

Testing for next(err) with supertest and Express JS

本文关键字:next err 测试 JS supertest Express 使用      更新时间:2023-09-26

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

当使用SuperTest进行测试时,这个工作流似乎不被支持。从中间件到超级测试的唯一错误结果是响应上的文本被设置为[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]'
  });

是否有一种方法与超级测试来验证对象传递给下一个()回调?

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

Supertest在HTTP响应级别工作,因此它只能根据HTTP消息检查响应本身的状态、报头和正文。它不能检查express应用程序中代码的javascript级细节(supertest实际上可以检查用任何语言编写的任意HTTP服务器,它只是为express提供了一些方便的代码)。

因此,首先我将编写一个错误处理程序中间件来翻译您的错误对象(实际上应该是Error实例而不是普通对象),设置适当的状态码,内容类型,正文等。然后为这些属性创建超测试关联。