React测试中Jest Mock返回Promise类方法报Apis未定义
报错原因
抛出Apis is undefined是因为mock写法存在两个核心问题:
jest.mock的工厂函数没有正确返回导出对象:箭头函数后直接跟大括号会被解析为函数代码块,而非要返回的对象字面量,函数没有任何返回值- mock返回的内容和原模块结构不匹配:原模块是ES Module具名导出
Apis类,mock逻辑里根本没有提供这个导出,组件执行new Apis()时自然拿不到对应构造函数。
修复方案
修改测试文件的mock逻辑,让工厂函数返回和原模块导出结构完全匹配的内容,具名导出Mock版的Apis类,类上挂载mock实现的getList方法即可:
// example.component.test.js jest.mock('../misc/apis', () => { return { Apis: class { getList = jest.fn(() => Promise.resolve([{ "item": "3" }, { "item": "4" }])) } } }) // 后续正常编写测试用例即可,比如渲染App组件、断言列表渲染的内容为mock返回的3、4
补充说明:你提供的原始
apis.js文件本身存在几处语法错误,正式运行非测试环境代码时也会报错:console.log的入参字符串未加引号、promise.resolve的Promise首字母未大写、类内方法定义语法错误,这些和本次mock报错无关,需要单独修正。
内容的提问来源于stack exchange,提问作者ajay kumar
相关产品推荐
相关产品推荐

