Я пытаюсь проверить вызов github
api
с помощью 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
и как я могу это исправить?
Он показывает правильный результат, когда я console.info(result)
. Так что я не думаю, что проблема в этом @edvardchen
Попробуйте const result = await getUserRepo('whitehox'); console.info(result);
и вы поймете о чем я
Сначала вы бросили пример кода и error
, потому что вы не можете использовать await
в этом случае. Попробуйте запустить мой код целиком и посмотрите, что получится. console.info(result)
вместо return result
. @эдвардхен
@edvardchen вы были правы, возвращая результат в конце.
Две вещи нужно исправить.
Вам нужно вернуть 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'
, я добавил его к ожидаемому значению).
Вероятно, вы забыли вернуть результат в конце функции getUserRepo.