开玩笑地扩展尝试返回承诺值

时间:2020-11-08 06:48:32

标签: jestjs

我正在使用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 方法以返回模拟值,但是模拟上的所有函数似乎都无法按我尝试的方式工作。

1 个答案:

答案 0 :(得分:0)

由于Jest间谍API用于模拟对象,因此应正确键入,如the documentation中所建议:

let apiService: MockProxy<IApiService>;

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

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

模拟的函数应该返回承诺,而不是返回承诺的函数,因此应将其模拟为:

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

apiService.send.mockResolvedValue("response")