对API的异步请求在Jest中返回未定义

时间:2019-04-02 15:36:54

标签: jestjs

对于测试,尤其是对于Jest,我是一个安静的新人。 我正在关注一些教程,在这些教程中它们以我尝试的方式处理异步代码。当我创建一个使用伪数据解析的自定义Promise时,我的代码似乎可以正常工作。但是,当我尝试使用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
    })
})

在一个教程中,我遇到了这与通过Node.JS运行的Jest有关,但是我不知道如何处理它,因为我不知道node.js。

此外,我遵循了Traversy Media的教程,克隆了他的Git存储库(https://github.com/bradtraversy/jest_testing_basics),并遇到了同样的问题(尽管在视频中有效)

1 个答案:

答案 0 :(得分:1)

问题是因为您没有从fetch退还诺言。

将您的functions2.js更新为以下内容:

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

希望有帮助。