Estoy usando el paquete html-pdf en mi código nodejs (no en Typescript). Ahora, este paquete tiene una función create() que está encadenada con la función toBuffer() . Estoy probando mi código usando Jest y quiero simular esta llamada pdf.create(html).toBuffer() .
var pdf = require('html-pdf'); pdf.create(html).toBuffer(function(htmlToPdfError, buffer){ if (htmlToPdfError) { reject(htmlToPdfError); } resolve(buffer.toString('base64')); });EDITAR: estoy tratando de usar el siguiente código en mi archivo de especificaciones para hacer el módulo:
jest.mock('html-pdf', () => ({ create: jest.fn(() => { return Promise.resolve(); }) })); Esto me está ayudando a simular la función create() pero no sé cómo devolver un objeto en Promise.resolve que tendría una función toBuffer
¿esto funcionara?
y luego afirmar que su búfer "pdf" contiene "cadena de prueba"?
jest.mock('html-pdf', () => ({ create: jest.fn(() => { return Promise.resolve({ toBuffer: function(callback) { callback(null, Buffer.from("test string", "utf-8")); }, }); }) }));(no lo he probado)
Podría burlarme de él usando el siguiente código:
const mockToBuffer = { toBuffer: jest.fn((callback: Function) => callback(null, null)), } jest.mock('html-pdf', () => ({ create: jest.fn(() => mockToBuffer), })) it('Should work', async () => { const expectedResult = Buffer.from([10]) mockToBuffer.toBuffer.mockImplementation((callback: Function) => { callback(null, expectedResult) }) // const result = await yourFuncUsingHtmlPdf(/* fakePayload */) // Comparing the buffer using the native function // expect(expectedResult.equals(result)).toBe(true) }