下面是一些使用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'
1条答案
按热度按时间pod7payv1#
作为解决方法,我将导入更改为
我在测试中使用了相同的导入,然后可以使用
jest.mock('xlsx',...)
而不是