簡體   English   中英

使用 Jest 模擬 html-pdf

[英]Mocking html-pdf using Jest

我在我的 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函數的對象

這會起作用嗎?

然后斷言您的“pdf”緩沖區包含“測試字符串”?

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

(我沒試過)

我可以使用以下代碼模擬它:

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM