Jest中调用含axios请求的async函数始终返回undefined问题排查
问题根因
你的fetchUsernames函数虽然声明了async关键字,但没有显式返回axios.get产生的Promise对象,所以函数默认返回undefined,测试中await拿到的结果自然就是undefined。axios.get本身返回的是Promise实例,你只调用了它却没有向外层返回这个实例,写在.then回调里的return usernames仅会作为Promise链的内部返回值,不会作为外层fetchUsernames函数的返回值。
修复方案
有两种修改方式可选:
- 利用
async/await的写法简化代码,避免嵌套的.then回调,可读性更高:
export async function fetchUsernames() { const usernames = []; // 直接await接收axios返回结果 const users = await axios.get("https://jsonplaceholder.typicode.com/users"); for (let user of users.data) { usernames.push(user.username); } return usernames; }
- 不想调整现有逻辑的话,直接在
axios.get前加return,把Promise实例返回即可:
export async function fetchUsernames() { const usernames = []; // 新增return返回Promise return axios.get("https://jsonplaceholder.typicode.com/users").then((users) => { for (let user of users.data) { usernames.push(user.username); } return usernames; }); }
额外建议
你当前的测试是直接调用真实外网接口,依赖网络环境稳定性,建议在jest中mock掉axios模块,避免测试受网络影响,也能提升测试运行速度。
内容的提问来源于stack exchange,提问作者Szelmat
相关产品推荐
相关产品推荐

