ioredis-mockって何?
ioredis
の全ての操作をメモリ内で実行するエミュレーター。実際にサーバーにアクセスすることなしにioredisをモック化することができる。
今回はこれをFake
として用いてRedisのテストを行う。
導入
npm i ioredis-mock
@types/ioredis-mock
という型定義ファイルもあるが、こちらは思ったように使用することができなかったためrequire("ioredis-mock")
としてimportする。
使ってみよう
redisインスタンスは以下のように作ることができる。
const Redis = require("ioredis-mock");
const redis = new Redis();
ioredisと全く同じように使ってみよう。
redis.test.ts
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秒経過させて取り出す。値がnullとなることを確認した。