Spy デコレータ
重要性: 5
その calls
プロパティにすべての関数呼び出しを保存するラッパーを返すデコレータ spy(func)
を作成してください。
すべての呼び出しは引数の配列として格納されます。
For instance:
function
work
(
a,
b
)
{
alert
(
a +
b )
;
// work は任意の関数またはメソッド
}
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
です。
ここでは、ログにすべての引数を格納するために calls.push(args)
を使い、呼び出しをフォワードするために、f.apply(this, args)
を使う事ができます。
function
spy
(
func
)
{
function
wrapper
(
...
args
)
{
wrapper.
calls.
push
(
args)
;
return
func
.
apply
(
this
,
arguments)
;
}
wrapper.
calls =
[
]
;
return
wrapper;
}