【发布时间】: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<IApiService>。 -
谢谢 Estus 我尝试了你建议的修复,但它总是说属性 mockReturnValue 在类型上不存在.....也看不到 send 返回一个函数时它只是返回一个承诺。跨度>
-
但是错误应该是在那之前,因为你已经使用了mockReturnValue,对吧?据我所知,MockProxy 类型应该足以解决这个问题。如果仍然无法解决此问题,请提供您当前的尝试和确切的错误消息。
标签: jestjs