使用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秒后进行取出。确认取出的值为空。