【发布时间】: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'
【问题讨论】: