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

如何用Jest测试函数内部的类实例方法调用

用Jest测试外部类实例方法的调用

没问题,我来帮你搞定这个测试需求!要确保myFunctionToBeTested里调用了MyClass实例的myFunc方法,核心思路是mock外部的MyClass模块,这样就能捕获它的实例和方法调用情况。下面一步步来:

第一步:Mock外部的MyClass

首先用Jest的jest.mock方法替换掉包含MyClass的外部包(或者本地文件)。假设MyClass来自'external-package',代码如下:

// 把这里的路径换成实际的外部包/本地文件路径
jest.mock('external-package', () => ({
  MyClass: jest.fn().mockImplementation(() => ({
    myFunc: jest.fn() // 注意:这里的方法名要和你调用的完全一致!
  }))
}));

划重点!你提供的代码里有个拼写小问题:MyClass里定义的方法是myfunc(小写f),但调用的时候写的是instance.myFunc()(大写F),这会导致实际运行报错,测试也通不过,记得先把这个拼写统一哦!

第二步:编写测试用例

接下来导入你要测试的函数和mock后的MyClass,然后写测试逻辑:

import { myFunctionToBeTested } from './your-test-file-path'; // 替换成你的文件路径
import { MyClass } from 'external-package';

describe('myFunctionToBeTested', () => {
  it('应该调用MyClass实例的myFunc方法', () => {
    // 执行要测试的函数
    myFunctionToBeTested();

    // 获取MyClass创建的实例(Jest会把所有new出来的实例存在mock.instances里)
    const myClassInstance = MyClass.mock.instances[0];
    // 断言myFunc被调用了一次
    expect(myClassInstance.myFunc).toHaveBeenCalledTimes(1);
    // 如果你只需要检查是否被调用过,也可以用:expect(myClassInstance.myFunc).toHaveBeenCalled();
  });
});

关键部分解释

  • jest.mock:帮我们替换掉外部依赖,让我们能完全控制MyClass的行为——这里我们让它返回一个带有mock方法myFunc的实例,方便后续追踪调用。
  • MyClass.mock.instances:Jest会自动记录所有通过new MyClass()创建的实例,因为你的函数里只创建了一个,所以取第一个就行。
  • toHaveBeenCalledTimes(1):用来验证方法被调用的次数,你可以根据需求调整数字,或者用toHaveBeenCalled()只验证是否被调用过。

如果MyClass是本地文件而不是外部包,只需要把jest.mock里的路径换成本地文件路径就可以啦。

内容的提问来源于stack exchange,提问作者Metarat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:12