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(…)。这样就更容易测试了。