Jest.js 如何在Nestjs中为IoRedis创建Mock Service

u1ehiz5o  于 2023-10-14  发布在  Jest
关注(0)|答案(1)|浏览(168)

我有NestJS应用程序与ioredis模块.我需要为使用Redis服务的服务创建测试(代码如下)。随着测试的开始,我的项目也开始了。但是在其他没有Redis服务的测试中,我的项目只进行了启动和运行测试。
也许我的Redis服务是错误的?如果我删除这个代码this.client = new Redis.Cluster(hosts, {...})我的测试运行witout所有项目。我试着使用ioredis-mock,但它没有工作。

import * as Redis from 'ioredis';
import { Injectable, Logger } from '@nestjs/common';
import {
  REDIS_HA_URL,
  REDIS_HA_PASSWORD,
  REDIS_PORT,
} from '../config/config.service';

@Injectable()
export class RedisService {
  private logger = new Logger('Redis Service');

  client;

  constructor() {
    const hosts = REDIS_HA_URL.map(element => ({ host: element, port: REDIS_PORT }));
    this.client = new Redis.Cluster(hosts, {
      redisOptions: {
        reconnectOnError() {
          return 2;
        },
        password: REDIS_HA_PASSWORD,
      },
    });

    this.client.on('error', (error: any) => {
      this.logger.error(Redis error  ${error});
    });
    this.client.on('reconnecting', () =>
      this.logger.error(Redis reconnecting...),
    );
  }
}
oogrdqng

oogrdqng1#

我相信有更好的方法但你没给予我们多少线索...
通过创建您自己的MockedClient对象来进行模拟,该对象将按照您想要的方式进行响应以进行测试,

@Injectable()
export class RedisServiceMock {
  constructor(
    client: Partial<RedisService['client']>
  ) {}
}

然后在单元测试文件中,创建一个RedisServiceMock示例,并设置测试模块来使用它。

相关问题