如何获取Jest模拟的SomeClient类型对象用于测试?
解决Jest中获取Mock类实例并传入方法的问题
你已经通过jest.mock正确mock了SomeClient类,要获取符合SomeClient类型的mock实例,直接实例化mock后的类即可,还能按需动态调整mock方法的返回值。
具体操作步骤:
创建Mock实例
jest.mock已经替换了some/module里的SomeClient实现,直接new SomeClient()就能得到我们定义的mock对象,构造参数传任意占位符(比如dummy值)就行,因为原构造逻辑已经被mock覆盖,不会实际执行。(可选)动态调整mock返回值
如果需要在不同测试用例里返回不同的Properties对象,用mockResolvedValue或mockRejectedValue修改getProperties的返回,比在mock实现里写死更灵活。
完整修改后的测试代码:
import { SomeClient } from 'some/module'; import { ConnectivityManager } from './your-connectivity-manager-path'; // 替换为实际文件路径 // 定义你的Properties类型结构 type Properties = { /* 示例:status: string; */ }; const mockResponseObject: Properties = { /* 示例:status: 'connected'; */ }; jest.mock('some/module', () => { return { SomeClient: jest.fn().mockImplementation(() => { return { getProperties: jest.fn().mockResolvedValue(mockResponseObject) }; }) }; }); test('isConnected returns true when SomeClient returns valid Properties', async () => { // 创建mock实例,参数用占位符即可 const someClientMock = new SomeClient('dummy-endpoint', 'dummy-token'); // 若需动态修改返回值,可在此处调整: // (someClientMock.getProperties as jest.Mock).mockResolvedValue({ status: 'disconnected' }); const result = await ConnectivityManager.isConnected(someClientMock); // 断言结果符合预期 expect(result).toBe(true); // 可选:断言getProperties方法被调用过 expect(someClientMock.getProperties).toHaveBeenCalledTimes(1); });
TypeScript类型提示说明:
如果编译器对someClientMock的类型有警告,可通过类型断言明确标注:
const someClientMock = new SomeClient('dummy-endpoint', 'dummy-token') as SomeClient;
一般情况下,因为我们的mock实现包含了getProperties方法,完全匹配SomeClient的接口定义,编译器会自动识别类型,无需额外断言。
内容的提问来源于stack exchange,提问作者tariq zafar
相关产品推荐
相关产品推荐

