JavaScript + jest で古いコード、module.exports
されていない関数をテストしたかったのですが、rewire というのを使えば可能でした、というメモ
たとえばこんなコード
function privateSum(a, b) { return a + b }
とだけ書かれたファイルがあるとします。この後に
module.exports = privateSum
ってされていれば、テストコードから import すればいいだけなんですが、export されていないので外部から privateSum関数にはアクセスできません
rewire
ここで rewire というライブラリをかませます
rewire, かなり昔からあるライブラリっぽい。これを使って、こんな風にテストを書くことができます。
const rewire = require('rewire') const myModule = rewire('../src/private') test('exported function', () => { const sum = myModule.__get__('privateSum') expect(sum(1, 2)).toBe(3) })
まず rewire を requireし、その rewire を使って対象のソースコードを読み込みます。
そんで
const sum = myModule.__get__('privateSum')
この __get()__
というメソッドで、export されていない関数を参照できるようになるという具合。あとは普通に呼び出してテスト可能。
べんり。
モック化にも使える
__set()__
というメソッドもあり、対象の関数や変数を差し替えることも可能でした。なのでテスト時のモック化なんかにも使える。
べんり。
サンプルこちら