Jest中无法成功Mock API调用问题排查求助
问题分析与修复方案
核心问题梳理
- 语法错误导致传参异常:调用
getOptions时,第一个URL参数的单引号未正确闭合,造成传入的URL格式错误,甚至可能触发意外的真实请求逻辑。 - 未等待Promise完成:原代码未用
await处理getOptions返回的Promise,直接访问fetchOptions.data时,Promise仍处于pending状态,无法获取有效结果。 - 缺少目标函数导入:测试文件未导入被测试的
getOptions函数,导致测试无法正确调用目标逻辑。
修正后的完整测试代码
import { getOptions } from './networkHelper'; // 新增目标函数导入 import axios from 'axios'; const mockData = [ { label: 'SEABROOK, 3028, VIC' }, { label: 'SEABIRD, 6042, WA' }, ]; jest.mock('axios'); describe('test api', ()=> { it('should resolve api call', async () => { axios.get.mockResolvedValue({data: mockData}); // 修正引号错误,添加await等待Promise完成 const fetchOptions = await getOptions('http://localhost:8080/options', 'seab'); expect(fetchOptions.data).toEqual(mockData); }); // 补充缺失的闭合括号 });
额外验证建议
可以添加对axios.get调用的断言,确保请求URL符合预期:
expect(axios.get).toHaveBeenCalledWith('http://localhost:8080/optionsvalue=seab');
(注:如果实际业务中URL需要拼接?,比如${url}?value=${userKeys},请根据需求调整拼接逻辑,避免生成不规范的URL)
内容的提问来源于stack exchange,提问作者sk215
相关产品推荐
相关产品推荐

