javascript - 使用 jest 测试 Javascript 对 api 的调用

标签 javascript asynchronous jestjs

我正在尝试使用 jest 测试对 github api 的调用,看看是否返回结果(这样做的目的是测试我的单元测试技能)。但由于某些原因,我的代码工作正常,但仍然未通过测试。我怀疑我很可能不明白如何编写此类测试。下面是我的代码

const functions = {
    getUserRepo: async (username) => {
    const url = `https://api.github.com/users/${username}/repos`;
    console.log(url);
    let result = [];
    await axios.get(url)
        .then(function (response) {
            response.data.forEach(value => result.push(value.name));
            return result;
        })
        .catch(function (error) {
            return error;
        });
    }
}  

上面的代码以数组格式返回正确的结果,但下面的测试失败

describe('Check repos from git api', () => {
test('Should return user repos', async () => {
    await functions.getUserRepo('whitehox')
        .then((response) => {
            expect(response.data).toEqual([ '57','decafreelance','decases','eexport','exportchat','flisch', 'gitprac', 'itravelcentral', 'pollark', 'portfolio', 'startereit', 'talkative', 'team-portfolio'])
        })
    });
});

请问此测试有什么问题以及如何修复它?

最佳答案

有两件事需要修复。

您需要从函数返回结果。可以简化为:

const functions = {
  getUserRepo: (username) => {
    const url = `https://api.github.com/users/${username}/repos`;
    console.log(url);
    return axios.get(url)  // <= return the result
      .then(function (response) {
        return response.data.map(value => value.name);
      })
      .catch(function (error) {
        return error;
      });
  }
}

...这使得响应数组,因此可以直接测试它:

describe('Check repos from git api', () => {
  test('Should return user repos', async () => {
    await functions.getUserRepo('whitehox')
      .then(response => {
        // response **is** the array
        expect(response).toEqual(['57', 'decafreelance', 'decases', 'eexport', 'exportchat', 'flisch', 'gitprac', 'itravelcentral', 'pollark', 'portfolio', 'startereit', 'talkative', 'team-portfolio', 'YorubaIndigenous']);  // Success!
      })
  });
});

(...还有一个名为 'YorubaIndigenous' 的新存储库,我将其添加到预期值中)。

关于javascript - 使用 jest 测试 Javascript 对 api 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603838/

相关文章:

javascript - 防伪 token Axios Asp .Net Core

javascript - 隐藏外部 URL,不知道它在 Electron 上运行

.net - 异步方法在哪里运行?

javascript - 如何测试简单的中间件

javascript - TypeError : (0 , _axios.default) 在 *.test.js 文件中使用 jest.mock ('axios' 时不是函数

javascript - 用循环填充对象

javascript - Sequelize 无法创建表,但是当我在 MySQL CLI 中运行它时它可以工作

java - 如何使用 Spring AsyncResult 和 Future Return

asynchronous - IBM MQ XMS 消息监听器仅获取队列中已有的消息而不是新消息

javascript - 如何通过管理 Promise(异步和等待)来绕过 5000ms 的 jest setTimeout 错误