Mengapa Testing Penting?
Test memberikan net safety untuk refactoring, dokumentasi perilaku kode, dan kepercayaan diri saat deploy. Test yang baik membuat developer lebih produktif, bukan lebih lambat.
Setup Jest
Untuk project Node.js: npm install -D jest @types/jest. Untuk TypeScript: tambahkan ts-jest. Untuk React: gunakan Vitest (lebih cepat) atau Jest dengan @testing-library/react.
Anatomy Test yang Baik
Ikuti pola AAA: Arrange (setup), Act (eksekusi), Assert (verifikasi). Satu test, satu behavior. Nama test harus jelas mendeskripsikan apa yang ditest dan expected outcome-nya.
Mocking
jest.fn() untuk mock function, jest.mock('module') untuk mock seluruh module, dan jest.spyOn() untuk spy tanpa mengubah implementasi asli.
Testing Async Code
Gunakan async/await dalam test, atau return Promise. Jangan lupa test error cases – expect(asyncFn()).rejects.toThrow().
Meaningful Coverage
Coverage 100% bisa dicapai dengan test yang tidak berarti. Fokus pada testing business logic, edge cases, dan error paths. Coverage 80% dengan test bermakna lebih baik dari 100% dengan test kosong.