Jest mock默认导出类报default is not a constructor错误
错误原因
Jest 模拟 ES default 导出模块时,依赖__esModule: true标记识别模块格式,该字段名前后必须是两个下划线。你的mock代码中将该字段错误写为单下划线开头的_esModule,导致Jest无法正确解析导出的构造函数,执行实例化逻辑时就会抛出TypeError: FooService_1.default is not a constructor错误。
修正方式
将mock配置中的_esModule字段修正为__esModule即可,修正后的mock代码如下:
jest.mock('src/js/services/FooService', () => { return { __esModule: true, default: jest.fn().mockImplementation(() => { return { saveInfo: jest.fn(), }; }), }; });
可选优化:如果需要在测试用例中断言
saveInfo方法的调用逻辑,可以将方法的mock函数提取到外层作用域,方便直接访问做断言,示例代码:const mockSaveInfo = jest.fn(); jest.mock('src/js/services/FooService', () => { return { __esModule: true, default: jest.fn().mockImplementation(() => { return { saveInfo: mockSaveInfo, }; }), }; }); // 测试用例中可直接调用断言 // expect(mockSaveInfo).toHaveBeenCalledWith(预期参数)
内容的提问来源于stack exchange,提问作者Sachidananda Naik
相关产品推荐
相关产品推荐

