4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JESTでグローバル関数を無理やりmock化する

Posted at

もっといい方法がありそうだが、実現できましたので記録に残します。

やりたいこと

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といい関係を続けたいです。
便利だがまだまだ使いこなせていない実感。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?