首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jest-模拟扩展尝试返回允诺值

jest-模拟扩展尝试返回允诺值
EN

Stack Overflow用户
提问于 2020-11-08 06:48:32
回答 1查看 829关注 0票数 1

我正在使用jest模拟扩展,并且我试图在一个被模仿的类接口上模拟一个公共函数。

这是我的IApiService

代码语言:javascript
复制
export default interface IApiService {
  send: (url: string) => Promise<any>;
}

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

代码语言:javascript
复制
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();
  });
});

我试图让发送方法返回一个模拟的值,但是模拟上的任何函数似乎都不像我试图调用的那样工作。

EN

回答 1

Stack Overflow用户

发布于 2020-11-08 20:01:55

由于Jest间谍API是在模拟对象上使用的,因此应该按照文献资料中的建议正确地键入

代码语言:javascript
复制
let apiService: MockProxy<IApiService>;

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

代码语言:javascript
复制
((url: string) => Promise<any>) & jest.SpyInstance<Promise<any>>

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

代码语言:javascript
复制
apiService.send.mockReturnValue(Promise.resolve("response"))

代码语言:javascript
复制
apiService.send.mockResolvedValue("response")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64735526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档