Протестируйте вызовы Javascript к API с помощью шутки

Я пытаюсь проверить вызов githubapi с помощью jest, чтобы увидеть, возвращаются ли результаты (цель этого — проверить мои навыки модульного тестирования). Но по некоторым причинам мой код работает нормально, но все равно не проходит мой тест. Я подозреваю, что я, скорее всего, не понимаю, как писать такие тесты. Ниже мой код

const functions = {
    getUserRepo: async (username) => {
    const url = `https://api.github.com/users/${username}/repos`;
    console.info(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;
        });
    }
}  

Этот код выше возвращает правильные результаты в формате array, но не test ниже

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'])
        })
    });
});

Пожалуйста, в чем проблема с этим test и как я могу это исправить?

Вероятно, вы забыли вернуть результат в конце функции getUserRepo.

edvard chen 10.04.2019 04:27

Он показывает правильный результат, когда я console.info(result). Так что я не думаю, что проблема в этом @edvardchen

codebarz 10.04.2019 04:38

Попробуйте const result = await getUserRepo('whitehox'); console.info(result); и вы поймете о чем я

edvard chen 10.04.2019 05:28

Сначала вы бросили пример кода и error, потому что вы не можете использовать await в этом случае. Попробуйте запустить мой код целиком и посмотрите, что получится. console.info(result) вместо return result. @эдвардхен

codebarz 10.04.2019 05:52

@edvardchen вы были правы, возвращая результат в конце.

codebarz 10.04.2019 05:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Две вещи нужно исправить.

Вам нужно вернуть result из вашей функции. Это можно упростить до этого:

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

... что делает response массив, поэтому проверьте его напрямую:

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', я добавил его к ожидаемому значению).

Другие вопросы по теме