【问题标题】:How to mock xlsx / sheeetjs with jest?如何用玩笑来模拟 xlsx/sheetjs?
【发布时间】:2022-12-15 22:27:19
【问题描述】:

这是一些使用 xlsx 库 (=sheetjs) 的代码:

import { read } from 'xlsx';

export default function foo(file){
  return read(file);
};

这是它的单元测试:

import foo from '../../../src/components/upload/demo';
it('foo', () => {
  const mockedXlsx = {
    read: () => 'mocked_result'
  };
  jest.mock('xlsx', () => mockedXlsx);

  const mockedFile = {
    arrayBuffer: () => {}
  };
  spyOn(mockedFile, 'arrayBuffer');
  const result = foo(mockedFile);
  expect(result).toBe('mocked_result');
  expect(mockedFile.arrayBuffer).toHaveBeenCalled();
});

我的 package.json 包含以下依赖项:

"xlsx": "https://cdn.sheetjs.com/xlsx-0.19.0/xlsx-0.19.0.tgz"

没有调用我模拟的 read 函数,而是调用了原始函数,我得到了错误

TypeError: e.slice is not a function

=> 我应该如何调整我的代码,以便 jest.mock 替换原来的读取功能?

我已经尝试过

a) 在 mockedXlsx 中包含 __esModule: true

b) 在 jest.config moduleNameMapper 中包含一个 xlsx 条目:

'^xlsx$': '<rootDir>/node_modules/xlsx/dist/xlsx.full.min.js'

【问题讨论】:

    标签: jestjs mocking sheetjs


    【解决方案1】:

    作为解决方法,我将导入更改为

    import xlsx from 'xlsx';
    

    我在测试中使用相同的导入,然后我可以使用 jest.mock('xlsx',...) 而不是

    spyOn(xlsx,'read')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 2020-02-08
      • 1970-01-01
      • 2022-10-06
      • 2020-12-17
      • 2019-04-24
      相关资源
      最近更新 更多