Node.js 如何用Jest模拟requestcallback
我试着开玩笑地模仿请求回调,但无法模仿 这是我的职责Node.js 如何用Jest模拟requestcallback,node.js,unit-testing,jestjs,request-promise,ts-jest,Node.js,Unit Testing,Jestjs,Request Promise,Ts Jest,我试着开玩笑地模仿请求回调,但无法模仿 这是我的职责 await requestPromise.get(options, ((err, resp) => { if (err) { throw err; } if (resp && resp.headers['content-disposition']) { res.setHeader('Content-type', 'application/pdf');
await requestPromise.get(options, ((err, resp) => {
if (err) {
throw err;
}
if (resp && resp.headers['content-disposition']) {
res.setHeader('Content-type', 'application/pdf');
res.setHeader('content-disposition', resp.headers['content-disposition']);
const pdfFile = Buffer.from(resp.body);
res.send(pdfFile);
}
})).catch((err: Error) => {
throw err;
});
在我的测试中,我嘲笑说这个测试通过了,但在覆盖率报告中,这些行并没有被测试覆盖
it('should download document', inject([PdfDocService, Res],
async (service: PdfDocService, res: Res) => {
const mockResp = {
body: {},
headers: { 'content-disposition': 'attachment; filename="Sathish_test.pdf"' },
};
jest.spyOn(requestPromise, 'get').mockResolvedValue(mockResp);
await service.downloadPdf(documentId, res);
}));
该代码是一个反模式。基于回调的API不应该与承诺混为一谈。而且
catch
是不可操作的。应该是const resp=wait requestPromise.get(…)代码>。这样就更容易测试了。