private でステートを持ったモジュールのテストをするとき、初期化用のメソッドを作っていませんか? 実は jest では内部ステートをリセットする方法があります。
やり方
やり方は単純で、require('./myModule')
でモジュールを読み込み、各テストの前に jest.resetModules()
を行うだけです。
例えばメモ化した関数のテストを考えます。当然、各テスト毎にメモ化状況はリセットしたいです。
export const memoizedFunc = memoize(f);
// import { memoizedFunc } from './myModule'; // これの代わりに describe('memoizedFunc', () => { // beforeEach でテスト毎に require し直す let memoizedFunc; beforeEach(() => { jest.resetModules(); memoizedFunc = require('./myModule').memoizedFunc; }); test('case1', () => { /* ステートがリセットされている */ }); test('case2', () => { /* ステートがリセットされている */ }); });
let memoizedFunc;
から始まる5行を足すだけでテスト自体は書き直す必要がありません。簡単ですね。
参考
javascript - how to reset module imported between tests - Stack Overflow