#jestjs
#jestjs
Вопрос:
Я новичок в тестировании, и, в частности, в Jest. Я следую нескольким руководствам, в которых они обрабатывают асинхронный код так, как я пытаюсь. Мой код, похоже, работает, когда я даю пользовательское обещание, которое разрешается с помощью фиктивных данных. Но когда я пытаюсь использовать axios для извлечения данных из внешнего API, Jest получает в качестве ответа undefined.
// functions2.js
const axios = require("axios")
const fetch = () => {
axios.get("https://jsonplaceholder.typicode.com/users")
.then(res => res.data)
.catch(err => err);
}
module.exports = fetch;
// functions2.test.js
describe("async operation", ()=>{
it("should be defined", ()=>{
expect(fetch).toBeDefined()
}); // Passed
it("should fetch", async () => {
expect.assertions(1);
const data = await fetch();
expect(data).toBeTruthy();
}) // Did not pass, data is undefined
it("should fetch, using promises", () => {
expect.assertions(1);
return fetch().then(data => {
expect(data).toBeTruthy();
}) // Did not pass, got 0 assertions
})
})
В одном учебном пособии я столкнулся с тем, что это как-то связано с запуском Jest через Node.JS, но я не знаю, как с этим справиться, потому что я не знаю node.js.
Кроме того, я следовал руководству Traversy Media, клонировал его репозиторий Git (https://github.com/bradtraversy/jest_testing_basics ) и столкнулся с той же проблемой (хотя в видео это сработало)
Ответ №1:
Проблема в том, что вы не возвращаете обещание от fetch
.
Обновите свой functions2.js
до чего-то вроде:
const fetch = async () => {
return axios
.get("https://jsonplaceholder.typicode.com/users")
.then(res => res.data)
.catch(err => err);
};