Spy decorator
vigtighed: 5
Opret en decorator spy(func) der returnerer en wrapper der gemmer alle kald til funktionen i dens calls egenskab.
Hvert kald er gemt som et array af argumenter.
For eksempel:
function work(a, b) {
alert( a + b ); // work er en tilfældig funktion eller metode
}
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. Denne decorator kan være brugbar ved unit-testing. En avanceret form er sinon.spy i Sinon.JS biblioteket.
Wrapperen der returneres af spy(f) skal gemme alle argumenter og derefter bruge f.apply til at videregive kaldet.
function spy(func) {
function wrapper(...args) {
// bruger ...args i stedet for arguments for at gemme et "rigtigt" array i wrapper.calls
wrapper.calls.push(args);
return func.apply(this, args);
}
wrapper.calls = [];
return wrapper;
}