もっといい方法がありそうだが、実現できましたので記録に残します。
やりたいこと
JESTにおいて、あるグローバル関数の処理は行わずに引数を渡し、期待する返り値を得る
テストしたいcodeAで、グローバルとして定義されているhogefunc
を扱いたい。
※ダミーでコード載せているので動かないかもしれません
codeA.js
var abc = hogefunc;
function codeA(){
return abc.foo('aiu','eo');
}
module.exports = codeA;
やったこと
1. package.json
のjest.globalプロパティにグローバル化したい変数を追加。
以下の場合は、hogefunc
をグローバル関数にしたい。
package.json
{
"jest":{
"globals": {
"hogefunc":""
}
}
2. testコードでglobal値を上書きする
hoge.test.js
require('./codeA.js');
hogefunc = function(){};
function foo(str1,str2){
return str1 + str2;
}
function bar(str1,str2){
return str2 + str1;
}
hogefunc.foo = foo;
hogefunc.bar = bar;
test('mock test' , () =>{
expect(hogefunc.foo('aiu','eo')).toBe('aiueo');
expect(hogefunc.bar('abc','de')).toBe('deabc');
});
test('codeA test' , () =>{
var a = new codeA();
expect(a).toBe('aiueo');
});
本当は・・・
Manual Mocksを使えばできたかもしれないが、うまく扱うことができなかった。
この辺は課題としてJESTといい関係を続けたいです。
便利だがまだまだ使いこなせていない実感。