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

Testing for next(err) with supertest and Express JS

在 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]'
  });

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

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

超测工作在HTTP响应层,所以它只能根据HTTP报文检查响应本身的状态,headers,body。它无法检查 javascript-level express 应用程序内部代码的详细信息(supertest 实际上可以检查用任何语言编写的任意 HTTP 服务器,它只是有一些方便的 express 代码)。

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