Jest.js 如何用笑话嘲笑xlsx / sheeetjs?

7rfyedvj  于 2022-12-16  发布在  Jest
关注(0)|答案(1)|浏览(182)

下面是一些使用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替换原来的read函数?
我已经试过了
a)在mockedXlsx中包含__esModule: true
B)在jest.config模块名称Map器中包含xlsx的条目:

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

pod7payv1#

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

import xlsx from 'xlsx';

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

spyOn(xlsx,'read')

相关问题