【问题标题】:jest-mock-extended trying to return promise valuejest-mock-extended 试图返回承诺值
【发布时间】:2021-02-20 10:06:30
【问题描述】:

我正在使用 jest-mock-extended,我正在尝试在已模拟的类接口上模拟一个公共函数。

这是我的 IApiService

export default interface IApiService {
  send: (url: string) => Promise<any>;
}

我对 homeService 类的测试,它只有一个名为 start 的公共函数。

import { mock } from "jest-mock-extended";
import HomeService from "./homeService";
import IApiService from "../Api/interface";

describe("HomeService", () => {
  let apiService: IApiService;
  let service: HomeService;

  beforeEach(() => {
    apiService = mock<IApiService>();
    service = new HomeService(apiService);
  });

  it("Should shit all over the place", () => {
    const mock_fetch = jest.fn(() => Promise.resolve("response"));
    apiService.send.mockReturnValue(mock_fetch);
    service.start();
    expect(mock_fetch).toBeCalled();
  });
});

我正在尝试让 send 方法返回一个模拟值,但模拟上的所有函数似乎都无法按照我尝试调用它们的方式工作。

【问题讨论】:

  • 您正在使send 函数返回一个函数,如果它不应该被调用,则永远不会被调用。可能应该是apiService.send.mockReturnValue(Promise.resolve("response"))
  • 你能举个例子吗?发送函数是返回函数吗?我更新了我的代码示例以在服务中显示我的发送方法。当我尝试使用 mockReturnValue 时出现此错误:Property 'mockReturnValue' does not exist on type '(url: string) => Promise'.
  • 我不使用这个库,也不能提供一个可行的例子。它应该与您发布的内容完全相同,并带有上面建议的修复程序。如果存在类型问题(在发布时就存在但未提及),apiService 需要正确输入,因为目前它没有输入为 Jest spy。从我在这里看到的github.com/marchaos/… 来看,应该是let apiService: MockProxy&lt;IApiService&gt;
  • 谢谢 Estus 我尝试了你建议的修复,但它总是说属性 mockReturnValue 在类型上不存在.....也看不到 send 返回一个函数时它只是返回一个承诺。跨度>
  • 但是错误应该是在那之前,因为你已经使用了mockReturnValue,对吧?据我所知,MockProxy 类型应该足以解决这个问题。如果仍然无法解决此问题,请提供您当前的尝试和确切的错误消息。

标签: jestjs


【解决方案1】:

由于在模拟对象上使用了 Jest spy API,因此应正确键入,如 the documentation 中所建议的那样:

let apiService: MockProxy<IApiService>;

这将方法类型与 Jest 间谍类型合并,send 类型类似于:

((url: string) => Promise<any>) & jest.SpyInstance<Promise<any>>

被模拟的函数应该返回一个promise,而不是一个返回promise的函数,所以它应该被模拟为:

apiService.send.mockReturnValue(Promise.resolve("response"))

apiService.send.mockResolvedValue("response")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-26
    • 2015-10-30
    • 2016-10-11
    • 1970-01-01
    • 2016-06-15
    • 2021-02-24
    • 2023-02-17
    相关资源
    最近更新 更多