2016-11-23 1 views
0

Rewire packageを使用して単体テストに関連してモックを挿入しています。これを行うことにより、Rewire:指定された戻り値を返さずにこの関数を実行するにはどうすればいいですか?

var a = 10; 
var b = 20; 

function adder(){ //not exported 
    console.log(a); 
    console.log(b); 
    return a + b; 
}; 

:私は私のモジュールでプライベート関数をテストすることができるように期待していた

30 
40 
undefined 

私はこれを見つける:コンソールに次のログ

var rewire = require('rewire'), 
    md = rewire('./module'), 
    mock = {a: 30, b: 40}, 
    cb = md.__get__('adder'); 

console.log(md.__with__(mock)(cb)); 

3040のログには、adder()mockで正常に呼び出されたと表示されているようです。

しかし、戻り値undefinedは、70の代わりになるのはなぜですか?

答えて

1

function(callback){ callback(); }

__with__()によって返される関数は、コールバックの結果を返さないので、あなたは未定義で終わる:それはこのような何かに煮詰めできるように

md.__with__(mock)は、コールバックをとる関数を返します。コンソールログに記録します。つまり、モックに渡されたコールバックの戻り値ではなく、モックによって返された関数の結果を記録しているということです。

編集...証拠としてこれを試してみてください:ここで

md.__with__(mock)(function(){ console.log(cb());}); 

私たちが代わりにコールバックから未定義の復帰のCB(加算器)の戻り値の値をロ​​グに記録されます。

0

コールバックの結果はpromiseになりますので:それは約束が(その場合、それは約束を返す)でない限り再配線によって返されたコールバック関数が値を返さないように私には見えます

// https://github.com/jhnns/rewire/blob/master/lib/__with__.js#L29 
returned = callback(); 
isPromise = returned && typeof returned.then === "function"; 
if (isPromise) { 
    returned.then(undo, undo); 
    return returned; 
} 
関連する問題