Jestjs jest mock试图返回承诺值

Jestjs jest mock试图返回承诺值,jestjs,Jestjs,我正在使用jest mock extended,并试图在一个被模拟的类接口上模拟一个公共函数 这是我的IApiService export default interface IApiService { send: (url: string) => Promise<any>; } 导出默认接口IApiService{ 发送:(url:string)=>承诺; } 我对homeService类的测试,该类只有一个名为start的公共函数 import { mock } f

我正在使用jest mock extended,并试图在一个被模拟的类接口上模拟一个公共函数

这是我的IApiService

export default interface IApiService {
  send: (url: string) => Promise<any>;
}
导出默认接口IApiService{
发送:(url:string)=>承诺;
}
我对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();
  });
});
从“jest mock extended”导入{mock};
从“/HomeService”导入HomeService;
从“./Api/interface”导入IApiService;
描述(“家庭服务”,()=>{
让apiService:IApiService;
让服务:上门服务;
在每个之前(()=>{
apiService=mock();
服务=新的家庭服务(apiService);
});
它(“应该到处拉屎”,()=>{
const mock_fetch=jest.fn(()=>Promise.resolve(“response”);
apiService.send.mockReturnValue(mock_fetch);
service.start();
expect(mock_fetch).toBeCalled();
});
});

我正在尝试获取send方法以返回模拟值,但模拟上的函数似乎没有一个像我试图调用它们那样工作。

由于Jest spy API用于模拟对象,因此应该正确键入,如中所示:

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

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


您正在使用
send
函数返回一个函数,如果不打算调用该函数,则永远不会调用该函数。可能应该是apiService.send.mockReturnValue(Promise.resolve(“response”)你能给我举个例子吗?发送函数是返回函数吗?我更新了代码示例以显示服务中的send方法。当我尝试使用mockReturnValue时,我得到以下错误:type'(url:string)=>Promise'上不存在属性“mockReturnValue”。我不使用此库,无法提供可行的示例。它可能正是您发布的内容,以及上面建议的修复。如果存在类型问题(在发布时就存在,但未提及),
apiService
需要正确键入,因为当前它不是作为Jest spy键入的。从这里我看到,它应该是
let-apiService:MockProxy
。感谢Estus,我尝试了您建议的修复方法,但它总是说类型上不存在属性mockReturnValue。。。。。当send只是返回一个承诺时,也看不到它在哪里返回一个函数。但是错误应该在那之前发生,因为你已经使用了mockReturnValue,对吗?在我看来,MockProxy类型应该足以解决这个问题。如果仍然无法解决此问题,请提供您当前的尝试和确切的错误消息。
((url: string) => Promise<any>) & jest.SpyInstance<Promise<any>>
apiService.send.mockReturnValue(Promise.resolve("response"))
apiService.send.mockResolvedValue("response")