You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Jest模拟的SomeClient类型对象用于测试?

解决Jest中获取Mock类实例并传入方法的问题

你已经通过jest.mock正确mock了SomeClient类,要获取符合SomeClient类型的mock实例,直接实例化mock后的类即可,还能按需动态调整mock方法的返回值。

具体操作步骤:

  1. 创建Mock实例
    jest.mock已经替换了some/module里的SomeClient实现,直接new SomeClient()就能得到我们定义的mock对象,构造参数传任意占位符(比如dummy值)就行,因为原构造逻辑已经被mock覆盖,不会实际执行。

  2. (可选)动态调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:50:24