我有一个使用Express的简单端点,允许用户下载csv
文件。我应该如何仅使用Jest对文件下载端点进行测试
我不确定应该使用哪个函数或mock来测试这个场景,因为下面的测试返回Number of calls: 0
controller.js
const getFile = async (req, res, next) => {
try {
res.setHeader('Content-Type', 'text/csv');
res.setHeader('Content-Disposition', 'attachment; filename=sample.csv');
const csv = 'ID\n1\n2\n3';
res.send(csv);
} catch (e) {
next(
new HttpException(
'internal error',
'file download error',
e.message,
),
);
}
}
controller.test.js
test('should successfully download the csv', async () => {
const mockReq = {};
const mockRes = {
send: jest.fn(),
};
await controller.getFile(mockReq, mockRes, jest.fn());
expect(mockRes.send).toHaveBeenCalledWith({ 'Content-Type': 'text/csv' });
});
1条答案
按热度按时间6yoyoihd1#
如果有人遇到类似的问题,我认为最简单的方法是使用
supertest
库。这个库支持HTTP assertions
,所以我可以在路由级别进行测试: