在 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/