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

Jest监视TypeORM Repository的update方法失败问题

解决Jest监视TypeORM Repository的update方法失败问题

问题原因

使用jest.mock('typeorm')自动生成的mock时,Repository的update方法未被正确模拟为函数,导致jest.spyOn无法识别该属性(返回undefined),而其他方法(如find、save)已被自动完成mock。

解决方案

方案1:手动模拟Repository类

替换自动mock为手动mock,确保包含update方法:

jest.mock('typeorm', () => {
  const actualTypeORM = jest.requireActual('typeorm');
  return {
    ...actualTypeORM,
    // 手动mock Repository类,实现所有需要的方法
    Repository: jest.fn().mockImplementation(() => ({
      find: jest.fn(),
      findOne: jest.fn(),
      delete: jest.fn(),
      save: jest.fn(),
      update: jest.fn(), // 显式添加update方法的mock
    })),
    // 若需使用getRepository,同步mock该方法
    getRepository: jest.fn().mockReturnValue(new actualTypeORM.Repository()),
  };
});

方案2:测试前手动赋值update方法

在测试初始化阶段,给someEntityRepository手动绑定mock的update函数:

beforeEach(() => {
  // 初始化仓库实例
  someEntityRepository = new Repository<SomeEntity>();
  // 为update方法绑定mock函数
  someEntityRepository.update = jest.fn();
});

// 之后正常使用spyOn
test('示例测试', () => {
  const updateSpy = jest.spyOn(someEntityRepository, 'update');
  // ...测试逻辑
});

方案3:类型断言绕过类型检查(临时方案)

如果是TypeScript类型系统导致的识别问题,可通过类型断言让Jest识别update:

const updateSpy = jest.spyOn(someEntityRepository as unknown as { update: jest.Mock }, 'update');

说明

优先选择方案1或2,二者能确保mock的完整性,避免后续其他方法出现类似问题。手动mock可以更精准地控制TypeORM模块的行为,适配测试需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:42:10