注入 CACHE_MANAGER 的 NestJs 测试

我有一些服务,我在构造函数中注入 CACHE_MANAGER

import { CACHE_MANAGER, Inject, Injectable } from '@nestjs/common';
import { Cache } from 'cache-manager';
...
export class ManagerService {
   constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}
   ...
}

当我测试导入这些服务的模块时,这给了我一个错误

Nest can't resolve dependencies of the ManagerService (?). Please make sure that the argument CACHE_MANAGER at index [0] is available in the Web3ManagerService context.

我对 NestJs 比较陌生,所以我真的不知道如何解决它

stack overflow NestJs Testing with CACHE_MANAGER injected
原文答案

答案:

作者头像

要在 CACHE_MANAGER 下注入缓存管理器提供程序,您需要将创建此提供程序的 nestjs 模块导入具有 ManagerService 的模块中

@Module({
  imports: [CacheModule.register()], // <<<<
  providers: [ManagerService],
})
export class AppModule {}

就像文档显示 https://docs.nestjs.com/techniques/caching

作者头像

设置 isGlobal: true

CacheModule.register({
    url: process.env.REDIS_URL,
    db: 0,
    port: parseInt(process.env.REDIS_PORT),
    password: process.env.REDIS_PASSWORD,
    isGlobal: true, //<<<<<<<
})
作者头像

我只是遇到了同样的问题并以这种方式解决了它:

manager.service.spec.ts

beforeEach(async () => {
  const module: TestingModule = await Test.createTestingModule({
    providers: [ManagerService, { provide: CACHE_MANAGER, useValue: {} }],
  }).compile();

  service = module.get<ManagerService>(ManagerService);
});