Dekorativ ayg'oqchi
Barcha chaqiruvlarni calls
xususiyatida ishlashga saqlaydigan o’ramni qaytaradigan dekorativ spy(func)
yarating.
Har bir chaqiruv argumentlar massivi sifatida saqlanadi.
Masalan:
function work(a, b) {
alert( a + b ); // ixtiyoriy funktsiya yoki usuldak ishlaydi
}
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. Ushbu dekorativ ba’zan birlik sinovi uchun foydalidir. Kengaytirilgan shakli – Sinon.JS kutubxonasida sinon.spy
.
Bu yerda biz barcha argumentlarni logda saqlash uchun calls.push(args)
va chaqiruvni yo’naltirish uchun f.apply(this, args)
dan foydalanishimiz mumkin.
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;
}