kembali ke pelajaran

Spy decorator

Buatlah sebuah dekorator spy(func) yang harus mengembalikan pembungkus yang menyimpan semua pemanggilan kepada fungsinya didalam propertinya sendiri bernama calls.

Setiap pemanggilan disimpan sebagai sebuah array dari argumen.

Contoh:

function work(a, b) {
  alert( a + b ); // bayangkan work adalah sebuah fungsi yang panjang
}

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"
}

Catatan. Dekoratornya harus berguna untuk unit-testing. Bentuk lanjutannya adalah sinon.spy didalam librari Sinon.JS.

Buka sandbox dengan tes.

Pembungkus yang dikembalikan oleh spy(f) harus menyimpan semua argumen dan lalu menggunakan f.apply untuk melanjutkan pemanggilannya.

function spy(func) {

  function wrapper(...args) {
    // gunakan ...args daripada argumen untuk menyimpan "array asli" didalam wrapper.calls
    wrapper.calls.push(args);
    return func.apply(this, args);
  }

  wrapper.calls = [];

  return wrapper;
}

Buka solusi dengan tes di sandbox.