スパイデコレーター
重要度:5
spy(func)
という、関数のすべての呼び出しをそのcalls
プロパティに保存するラッパーを返すデコレーターを作成してください。
各呼び出しは、引数の配列として保存されます。
例:
function work(a, b) {
alert( a + b ); // work is an arbitrary function or method
}
work = spy(work);
work(1, 2); // 3
work(4, 5); // 9
for (let args of work.calls) {
alert( 'call:' + args.join() ); // "call:1,2", "call:4,5"
}
P.S. そのデコレーターは単体テストで有用な場合があります。洗練された形は、Sinon.JSライブラリのsinon.spy
です。
spy(f)
が返すラッパーは、すべての引数を格納してからf.apply
を使用して呼び出しを転送する必要があります。
function spy(func) {
function wrapper(...args) {
// using ...args instead of arguments to store "real" array in wrapper.calls
wrapper.calls.push(args);
return func.apply(this, args);
}
wrapper.calls = [];
return wrapper;
}