module.exports されていない関数を Jest でテストする
「Private method のテストコードをどうやって書くか?」的な話
private な関数に対してテストを書くな的な議論は置いとく
個人的には特定の条件であれば書いてもいい派
詳細は割愛する
1. babel-plugin-rewire をインストール
2. babel.config.js に設定を記載
3. module.exports されていない関数を require('./foo.js').__get__('bar'); で読み込む
/icons/hr.icon
1. babel-plugin-rewire をインストール
code:bash
npm install --save-dev babel-plugin-rewire
2. babel.config.js に設定を記載
code:babel.config.js
module.exports = {
};
3. module.exports されていない関数を require('./foo.js').__get__('bar'); で読み込む
code:foo.test.js
// bar() は module.exports されていない関数とする
const bar = require('./foo.js').__get__('bar');
// あとは普通にテストを書くだけ
describe('bar()', () => {
it('should return undefined', () => {
expect(bar()).toBeUndefined();
});
});
裏で babel-plugin-rewire がうまいことやってくれていて
require() に、 module.exports されていない関数でも読み込んでくれる __get__() が追加されている
__get__('module.exports されていない関数名') で取得できる
ただし、bar() は ./foo.js ファイル内で使用 (コール) されていること
未使用関数は __get__() できない
(以下の「問題点」参照)
問題点
bar() が module.exports されている必要はないが、同一ファイル内で未使用だと __get__() できない?
code:foo.js
function bar() {};
bar(); // コールされている必要がある
使われていない関数は途中の最適化か何かで消される?
export も使用もされてない関数は、ただの不要な関数だから、問題ではないか sunone.icon
とりあえず foo.js ファイル内で該当関数がコールされていればいい