对于测试,尤其是对于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),并遇到了同样的问题(尽管在视频中有效)
答案 0 :(得分:1)
问题是因为您没有从fetch
退还诺言。
将您的functions2.js
更新为以下内容:
const fetch = async () => {
return axios
.get("https://jsonplaceholder.typicode.com/users")
.then(res => res.data)
.catch(err => err);
};
希望有帮助。