首页 > 解决方案 > 用 Jest 测试 exceljs(第三方模块)

问题描述

我正在使用 exceljs 生成一个包含一些数据的 excel 文件。我想为该函数编写测试用例。

这是功能:

public exportUploadErrors(data: UploadError[]): void {
    const fileName = `lei-upload-errors-${new Date().toISOString()}`;
    const workbook = new Workbook();
    const worksheet: Worksheet = workbook.addWorksheet('Upload Errors');

    const headers = [
      { header: 'LEI ID', key: 'leiId' },
      { header: 'Error Message', key: 'error' },
    ];

    worksheet.columns = headers;

    worksheet.getRow(1).fill = {
      type: 'pattern',
      pattern: 'solid',
      fgColor: { argb: 'cccccc' },
    };

    worksheet.getRow(1).font = {
      size: 12,
      bold: true,
    };

    // adding data to excel sheet
    data.forEach((error: UploadError) => {
      worksheet.addRow(error);
    });

    workbook.xlsx.writeBuffer().then((leiExportArr) => {
      const blob = new Blob([leiExportArr], {
        type:
          'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      });

      fs.saveAs(blob, `${fileName}.xlsx`);
    });
  }

当我exportUploadErrors用虚拟数据调用方法时,workbook.xlsx.writeBuffer()方法不会被调用,方法也是如此fs.saveAs

我如何模拟这些方法?

标签: unit-testingjestjsexceljsts-jest

解决方案


其中之一应该工作:

await workbook.xlsx.writeFile(filename);

或者

const buffer = workbook.xlsx.writeBuffer()
await fs.writeFileSync('file.xlsx', buffer);

文档: https ://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options

顺便提一句。出于生成目的,我将为您提供我的 lib:xlsx-renderer,它由 ExcelJS 提供支持


推荐阅读