使用supertest和Express JS测试下一个(错误)

时间:2016-09-21 14:58:18

标签: javascript express supertest

在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,甚至是可测试单元之后支持的定制中间件。

1 个答案:

答案 0 :(得分:0)

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

因此,我首先编写一个错误处理程序中间件来转换您的错误对象(实际上应该是Error个实例而不是普通对象),设置正确的状态代码,内容类型,正文等。然后制作你对这些属性的超级联想。