【发布时间】:2022-02-11 10:35:12
【问题描述】:
我有一个返回中间件的函数:
const jsonParser = () => {
return express.json({
limit: '5mb',
verify: (req, res, buf) => {
// If the incoming request is a stripe event,
if (req.headers['some-header']) {
httpContext.set('raw-body', buf.toString());
}
},
});
};
我想测试当some-header 标头存在时,httpContext.set 确实被调用了。
我的测试:
describe('jsonParser middleware', () => {
it('sets the http context', async () => {
const req = {
headers: {
'some-header': 'some-sig',
'content-type': 'application/json',
},
body: JSON.stringify({
some: 'thing',
}),
};
const res = {};
const middleware = jsonParser();
middleware(req, res, () => {});
expect(httpContext.set).toHaveBeenCalled();
});
});
我不知道如何让测试运行传递给verify 的函数。 Express 文档声明内容类型应该是 json,但仅此而已。任何能指出我正确方向的人都将受到高度赞赏。
谢谢。
【问题讨论】:
-
我不会在单元级别测试它(正如你所看到的,你最终会测试你不拥有接口的 Express 对象的替身),例如使用SuperTest 以 integration 测试使用该标头的端点是否正确运行。
-
@jonrsharpe 这是一个公平的观点。我们目前缺乏集成测试,这是我们高层需要它的另一个很好的例子。感谢您的回复。