【问题标题】:Testing simple GET request using Axios and Jest使用 Axios 和 Jest 测试简单的 GET 请求
【发布时间】:2018-10-17 10:52:46
【问题描述】:

我正在使用axios0.18.0jest22.4.2,我正在尝试使用基于Axios documentation exampleJest Async / Await documentation 的Axios 和Jest 测试一个简单的请求

// services.js
import axios from 'axios';

export const getUser = () => axios.get('https://api.github.com/users/mzabriskie');


// services.spec.js
import { getUser } from './services';

it('should return data from github user', async () => {
  jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
  const result = await getUser();
  console.log('RESULT -->', result);
});

一旦通过DEFAULT_TIMEOUT_INTERVAL(在本例中为 30 秒),测试会给出以下错误消息:

Error: Timeout - Async callback was not invoked within timeout 
specified by jasmine.DEFAULT_TIMEOUT_INTERVAL

它永远不会到达console.log 语句。

知道我在这里可能缺少什么或如何调试吗?

【问题讨论】:

  • 不过,这真的不是单元测试。示例测试实际上是测试 GitHub 是否有效,而不是您的组件。您可能会查看axios-mock-adapter,它非常有用且易于模拟您尝试测试的端点。 github.com/ctimmerm/axios-mock-adapter
  • 你是对的,但我通常会测试真实的请求以确保一切正常,一旦工作正常,我会添加用于拦截请求的模拟(我通常使用 nock 来实现此目的)。无论如何感谢您的建议,我会尝试的:)

标签: unit-testing jasmine axios jestjs


【解决方案1】:

所以问题出在使用依赖项 jest-mock-axios 似乎一旦配置它就不允许 HTTP 请求在测试中通过,即使您没有在特定测试中使用它(例如在原始问题示例)。

因此,为了解决这个问题,所有相关的请求测试都必须定义模拟才能工作(或者如果您希望测试真正的 API 请求,则完全删除 jest-mock-axios 依赖项)。

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2021-08-25
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2020-07-04
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多