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
相关产品推荐
相关产品推荐

