使用ioredis-mock库在jest中进行redis测试
ioredis-mock是什么?
一个能够在内存中执行所有ioredis操作的模拟器。可以将ioredis模拟成在实际服务器上进行访问,而无需实际访问服务器。
这次我们使用这个Fake来对Redis进行测试。
引入
npm i ioredis-mock
虽然也有名为@types/ioredis-mock的类型定义文件,但由于无法按预期使用,因此需要使用require(“ioredis-mock”)进行导入。
让我们试一试
可以按照以下方式创建redis实例。
const Redis = require("ioredis-mock");
const redis = new Redis();
让我们尝试以完全相同的方式使用 ioredis。
const Redis = require("ioredis-mock");
const redis = new Redis();
it("should get value", async () => {
const id = "hoge";
const value = "fuga";
await redis.set(id, value);
const gotValue = await redis.get(id);
expect(gotValue).toEqual(value);
});
只需再次获取设定的值。无需特别设置服务器或其他任何配置,仅通过此操作即可运行。
让我们尝试一下过期(expire)。
可以在Jest中运行的情况下,在Redis中控制测试时间的经过。
it("should expire", async () => {
jest.useFakeTimers();
const id = "hoge";
const value = "fuga";
await redis.set(id, value, "EX", 60);
jest.advanceTimersByTime(60_000);
const gotValue = await redis.get(id);
expect(gotValue).toBeNull();
});
设定一个在60秒后过期的密钥,并等待60秒后进行取出。确认取出的值为空。