#javascript #asynchronous #jestjs
#javascript #асинхронный #jestjs
Вопрос:
Я пытаюсь протестировать вызов github
api
using jest
, чтобы увидеть, возвращаются ли результаты (цель этого — проверить мои навыки модульного тестирования). Но по некоторым причинам мой код работает нормально, но по-прежнему не проходит мой тест. Я подозреваю, что я, скорее всего, не понимаю, как писать такие тесты. Ниже приведен мой код
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 resu<
})
.catch(function (error) {
return error;
});
}
}
Этот приведенный выше код возвращает правильные результаты в array
формате an, но не 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
и как мне это исправить?
Комментарии:
1. Вы, вероятно, забыли вернуть результат в конце функции getUserRepo
2. Он показывает правильный результат, когда я
console.log(result)
. Так что я не думаю, что это проблема @edvardchen3. Попробуйте
const result = await getUserRepo('whitehox'); console.log(result);
, и вы поймете, что я имею в виду4. Сначала вы выбрасываете пример кода и
error
вызываете, что вы не можете использоватьawait
в этом случае. Попробуйте запустить мой код целиком и посмотрите, что вы получите.console.log(result)
вместоreturn result
. @edvardchen5. @edvardchen вы были правы насчет возврата результата в конце.
Ответ №1:
Необходимо исправить две вещи.
Вам нужно вернуть result
из вашей функции. Это можно упростить до этого:
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;
});
}
}
… что позволяет 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'
, я добавил его к ожидаемому значению).