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

NestJS测试中this.cacheManager.get不是函数问题求助

解决NestJS测试中CacheManager.get不是函数的问题
  • 在测试模块显式配置CacheModule
    测试环境不会自动继承主模块的全局配置,即便主模块设置了CacheModule.register({ isGlobal: true }),测试模块仍需手动导入配置:

    import { Test } from '@nestjs/testing';
    import { CacheModule } from '@nestjs/common';
    import { TargetService } from './target.service';
    
    describe('TargetService', () => {
      let service: TargetService;
    
      beforeEach(async () => {
        const moduleRef = await Test.createTestingModule({
          imports: [CacheModule.register()], // 必须在测试模块中配置
          providers: [TargetService],
        }).compile();
    
        service = moduleRef.get<TargetService>(TargetService);
      });
    
      it('should execute cache operations correctly', async () => {
        // 编写测试逻辑
      });
    });
    
  • Mock缓存管理器替代真实服务
    如果不需要启动真实缓存,直接mockCACHE_MANAGER并实现所需方法:

    import { Test } from '@nestjs/testing';
    import { CACHE_MANAGER } from '@nestjs/common';
    import { TargetService } from './target.service';
    
    describe('TargetService', () => {
      let service: TargetService;
      let mockCacheManager: any;
    
      beforeEach(async () => {
        // 模拟缓存方法
        mockCacheManager = {
          get: jest.fn().mockResolvedValue('mock-cache-value'),
          set: jest.fn().mockResolvedValue(true),
          // 按需添加其他方法
        };
    
        const moduleRef = await Test.createTestingModule({
          providers: [
            TargetService,
            {
              provide: CACHE_MANAGER,
              useValue: mockCacheManager,
            },
          ],
        }).compile();
    
        service = moduleRef.get<TargetService>(TargetService);
      });
    
      it('should call cacheManager.get', async () => {
        const result = await service.yourCacheRelatedMethod();
        expect(mockCacheManager.get).toHaveBeenCalled();
        expect(result).toBe('mock-cache-value');
      });
    });
    
  • 关键排查点

    • 确认测试模块是否导入了CacheModule,或是否正确提供了mock的CACHE_MANAGER
    • 检查mock对象是否正确实现了get方法,避免拼写错误或未定义方法
    • 全局模块在测试环境中不会自动生效,必须显式导入或注入依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:43:19