0

我在我的 nodejs 代码中使用html-pdf包(不在 Typescript 中)。现在,这个包有一个与函数create()链接的toBuffer()函数。我正在使用 Jest 对我的代码进行单元测试,并想模拟这个调用pdf.create(html).toBuffer()

var pdf = require('html-pdf');
pdf.create(html).toBuffer(function(htmlToPdfError, buffer){
  if (htmlToPdfError) {
    reject(htmlToPdfError);
  }
  resolve(buffer.toString('base64'));
});

编辑:我正在尝试在我的规范文件中使用以下代码来制作模块:

jest.mock('html-pdf', () => ({
    create: jest.fn(() => {
        return Promise.resolve();
    })
}));

这有助于我模拟该create()函数,但我不知道如何在 Promise.resolve 中返回一个具有toBuffer函数的对象

4

2 回答 2

0

这行得通吗?

然后断言您的“pdf”缓冲区包含“测试字符串”?

jest.mock('html-pdf', () => ({
  create: jest.fn(() => {
    return Promise.resolve({
      toBuffer: function(callback) {
        callback(null, Buffer.from("test string", "utf-8"));
      },
    });
  })
}));

(我没试过)

于 2021-11-04T20:44:46.187 回答
0

我可以使用以下代码模拟它:

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)
}
于 2021-12-30T02:35:49.037 回答