Асинхронный запрос на возврат API не определен в Jest - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в тестировании, особенно в Jest.Я следую нескольким учебникам, в которых они обрабатывают асинхронный код так, как я пытаюсь.Мой код, кажется, работает, когда я делаю пользовательское обещание, которое разрешается с фиктивными данными.Но когда я пытаюсь использовать axios для извлечения из внешнего API, Jest получает как неопределенный ответ.

// 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 Ответ

1 голос
/ 02 апреля 2019

Проблема в том, что вы не возвращаете обещание от fetch.

Обновите functions2.js до что-то вроде:

const fetch = async () => {
  return axios
    .get("https://jsonplaceholder.typicode.com/users")
    .then(res => res.data)
    .catch(err => err);
};

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...