【问题标题】:Mocking a service in Jest在 Jest 中模拟服务
【发布时间】:2020-06-01 19:49:45
【问题描述】:

我正在尝试学习有关 Jest 的教程。我正在尝试进行一个包含我的 REST 服务模拟的测试。根据教程,我需要在与 src 文件夹相同的级别添加一个名为 mocks 的文件夹(前后有两个下划线 - 所以会删除此编辑器中的那些)。在该文件夹中,我创建了一个与我的 REST 服务同名的 const:

const CrawlService = jest.fn(() => 42);

现在在我的测试中,我有以下内容:

import { CrawlService } from "../../../services/CrawlService";
import "regenerator-runtime/runtime";

describe("CardsButtonContainer", () => {
  it("dsfsdf", async () => {
    var jobsResult = await CrawlService.getJobs(0, 1, 1, 10, 0);
  });
});

我的期望是 Jest 会用模拟服务替换我的 REST 服务,我在这里误解了什么吗?我收到以下错误:

请求失败,状态码 404

似乎是我的 REST 服务被调用,而不是被模拟的服务。

我想我必须以某种方式添加函数 getJobs,但我不确定当它来自一个班级时如何做到这一点?欢迎大家指点。

我正在尝试遵循此示例:

【问题讨论】:

  • 我建议你使用像 fetch-mocknock 这样的库来模拟实际的端点。这允许您的前端代码发出实际请求,但响应将在您的测试中被模拟。
  • 我正在尝试跟踪示例,我在帖子中添加了一张图片。他不使用任何额外的框架。
  • 看起来该示例正在模拟整个 isomorphic-fetch 模块。使用像 fetch-mocknock 这样的库要简单得多,并且允许您自定义任何请求的响应。
  • 谢谢,我会试一试。你能添加一个答案。当我实施了一个工作样本时,我会接受它。如果你应该推荐两个包中的一个,你会选择哪一个?

标签: reactjs jestjs


【解决方案1】:

您在屏幕截图中显示的示例模拟了整个 isomorphic-fetch 模块。我建议您改用 fetch-mocknock 之类的库。这两者都提供了一个 API,允许您自定义响应以进行测试。

【讨论】:

    猜你喜欢
    • 2023-01-30
    • 2020-08-22
    • 2021-09-13
    • 2022-06-28
    • 1970-01-01
    • 2021-03-22
    • 2021-11-19
    • 2021-06-29
    • 2021-09-14
    相关资源
    最近更新 更多