我有一个我想使用redis的typescript类,我的想法是在另一个模块中设置并连接到redis,并将其传递给构造函数,这样我也可以在单元测试中模拟redis客户端。就像这样:
redis.ts
import { createClient } from "redis";
import config from "../../config";
const redisClient = createClient({ url: config.redis_url });
redisClient.connect();
export default redisClient;
MyService.ts
export default class MyService {
private cacheClient: RedisClientType;
constructor(redisClient: RedisClientType) {
this.cacheClient = redisClient;
}
}
然后像这样使用:
import redisClient from "./redis"
import MyService from "./MyService"
const myService = new MyService(redisClient);
,但我得到一个错误,当我尝试这个。类型'redisClientType{…很多额外的东西……}不能赋值给'RedisClientType'类型的参数
我正在寻找一个使用redis与强类型typescript和mock的好例子,这将允许我更有效地进行单元测试。
我必须为Redis OM解决这个问题。我们欢迎您仔细研究代码,看看里面有什么。
对我来说关键的事情是当我调用.createClient
或.createCluster
时,定义节点Redis返回的Redis连接的类型。我是这样做的:
/** A conventional Redis connection. */
export type RedisClientConnection = ReturnType<typeof createClient>
/** A clustered Redis connection. */
export type RedisClusterConnection = ReturnType<typeof createCluster>
/** A Redis connection, clustered or conventional. */
export type RedisConnection = RedisClientConnection | RedisClusterConnection
希望这对你有帮助!