【发布时间】:2022-10-17 13:11:19
【问题描述】:
我有一个使用 Express 的简单端点,允许用户下载 csv 文件。
我应该如何仅使用 Jest 对文件下载端点进行测试
我不确定应该使用哪个函数或模拟来测试这种情况,因为它返回 Number of calls: 0 以进行以下测试
控制器.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,
),
);
}
}
控制器.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' });
});
【问题讨论】:
-
不确定您要做什么。你的
getFile没有返回任何东西,也没有调用next()(开玩笑的回调),它不应该这样,否则你会得到一个错误。你在这里有一些奇怪的实现。 -
应该是
expect(mockRes.send).toHaveBeenCalledWith('ID\n1\n2\n3')