Pengenalan Sinon.js
Sinon.js adalah pustaka (library) JavaScript yang menyediakan fungsi standalone test spies, stubs, dan mocks untuk pengujian unit. Sinon.js tidak terikat pada framework pengujian tertentu, sehingga dapat digunakan bersama Mocha, Jest, Jasmine, atau QUnit. Inti dari Sinon.js adalah kemampuannya untuk memanipulasi fungsi dan objek tanpa mengubah kode sumber aplikasi Anda.
Konsep Utama Sinon.js
| Fitur | Kegunaan Utama |
|---|---|
| Spies | Melacak pemanggilan fungsi, argumen, dan nilai kembalian. |
| Stubs | Mengganti fungsi dengan perilaku yang ditentukan (hardcoded). |
| Mocks | Kombinasi spy dan stub dengan ekspektasi perilaku yang ketat. |
| Fake Timers | Mengontrol waktu (setTimeout, setInterval) dalam pengujian. |
| Fake XHR/Fetch | Meniru respons jaringan tanpa melakukan request HTTP nyata. |
Implementasi Spy
Spy digunakan untuk memverifikasi apakah sebuah fungsi dipanggil dengan argumen yang benar.
const callback = sinon.spy();
function panggilCallback(cb) {
cb('data');
}
panggilCallback(callback);
console.log(callback.calledOnce); // true
console.log(callback.calledWith('data')); // trueImplementasi Stub
Stub digunakan untuk memaksa fungsi mengembalikan nilai tertentu, sangat berguna untuk mengisolasi unit yang bergantung pada API eksternal.
const user = { getNama: () => 'Nama Asli' };
sinon.stub(user, 'getNama').returns('Nama Palsu');
console.log(user.getNama()); // 'Nama Palsu'Manajemen Fake Timers
Untuk menguji kode yang menggunakan setTimeout atau setInterval, Sinon menyediakan Fake Timers agar pengujian tidak perlu menunggu waktu nyata.
const clock = sinon.useFakeTimers();
let dipanggil = false;
setTimeout(() => { dipanggil = true; }, 1000);
clock.tick(1000); // Memajukan waktu 1 detik
console.log(dipanggil); // true
clock.restore();Tips Troubleshooting
- Selalu gunakan
sinon.restore(): Pastikan untuk memanggilsinon.restore()di dalam blokafterEachpada framework testing Anda untuk mencegah kebocoran state antar tes. - Hindari Over-mocking: Gunakan stub untuk data, dan spy untuk verifikasi alur. Jangan gunakan mock kecuali Anda benar-benar perlu memverifikasi urutan pemanggilan yang kompleks.
- Kompatibilitas: Jika menggunakan ES6 Modules, pastikan Anda menggunakan alat bantu seperti
babel-plugin-rewireatauproxyquirekarena Sinon tidak bisa langsung melakukan stub pada fungsi yang diimpor secara statis.
🔍 Orang Lain Juga Mencari Ini
Sinonjs Tutorial
Javascript Unit Testing
Sinonjs Spy Vs Stub
Mocking Api With Sinon
Sinon Fake Timers Example
Testing Asynchronous Code Javascript
Sinonjs Documentation
Mocha Sinon Chai Tutorial
Javascript Testing Best Practices
Sinon Stub Return Value
Sinon Sandbox Usage
Unit Testing Nodejs
Sinonjs Installation
Testing Fetch With Sinon
Sinonjs Vs Jest Mocks