はじめに
Redis用ライブラリのioredis
を楽にモックしたくて探したところ、ioredis-mock
というそれらしいライブラリを発見しました。
これをJest
で使おうとしたところ、ちょっとハマったのでやり方を書こうと思います。
準備
npmまたはyarnでioredis-mock
を追加します。
npm install -D ioredis-mock
または
yarn add -D ioredis-mock
使い方
以下では単純にioredis
のインスタンスをioredis-mock
にすげ替えています。
// mock関数でioredisを自動モック
jest.mock('ioredis');
// 自動モックの後にrequireで読み込む
const Redis = require("ioredis");
const RedisMock = require("ioredis-mock");
test('test', async () => {
// redisが返す値をdataキーがトップのJSON形式で定義
const data = { data: {'hoge': 'fuga'} };
// redisが返す値をRedisMockコンストラクターに渡す
// この設定はioredisには存在しない
const redisMock = new RedisMock(data);
// 自動モックされているioredisからmockImplementation()を呼び出し、
// redisMockインスタンスを返却させる
Redis.mockImplementation(() => redisMock);
// ioredisを使う処理を含む何らかのテスト
...
おわりに
ioredis-mock
よりもJest
の使い方が分からなくてハマってしまいました。
requireの前にmockを呼んで、mockImplementation()でインスタンスをすげ替えればいいという、
分かってしまえば単純なことでした。
リンク
ioredis-mock
https://github.com/stipsan/ioredis-mock