Derse geri dön

Gözetmen dekoratör

önem: 5

spy(func) adında bir dekoratör yazın ve bu fonksiyona gelen tüm çağrıları calls özelliğine kaydetsin.

Çağrıların tamamı argüman dizisi olarak kaydedilsin.

Örneğin:

function work(a, b) {
  alert( a + b ); // work keyfi bir metod veya fonksiyondur.
}

work = spy(work);

work(1, 2); // 3
work(4, 5); // 9

for(let args of work.calls) {
  alert( 'çağrı:' + args.join() ); // "çağrı:1,2", "çağrı:4,5"
}

Not: Birim testleri için dekoratörler oldukça yararlıdır. Bunun daha gelişmiş bir versiyonu sinon.spy olarak Sinon.JS kütüphanesinde bulunmaktadır.

Testler ile korunaklı olan aç.

Burada calls.push(args) ile f.apply(this,args)'a gönderilen tüm çağrıların argümanları tutulabilir.

function spy(func) {

  function wrapper(...args) {
    wrapper.calls.push(args);
    return func.apply(this, arguments);
  }

  wrapper.calls = [];

  return wrapper;
}

Çözümü testler korunaklı alanda olacak şekilde aç.