在Express中的路由或中间件中,您可以通过调用next(err)来跳过剩余的调用链,其中 err 是任何对象。从文档中可以很简单。
使用SuperTest进行测试时,似乎不支持此工作流程。中间件到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对代码进行直接单元测试,但我很好奇是否可以使用supertest,甚至是可测试单元之后支持的定制中间件。
答案 0 :(得分:0)
Supertest在HTTP响应级别工作,因此它只能根据HTTP消息检查响应本身的状态,标题和正文。它无法检查有关Express应用程序内部代码的javascript级详细信息(supertest实际上可以检查用任何语言编写的任意HTTP服务器,它只是有一些方便的快捷代码)。
因此,我首先编写一个错误处理程序中间件来转换您的错误对象(实际上应该是Error
个实例而不是普通对象),设置正确的状态代码,内容类型,正文等。然后制作你对这些属性的超级联想。