Integration Test
Menguji interaksi antar komponen dalam aplikasi
Apa itu Integration Test
- Menguji bagaimana beberapa modul bekerja sama
- Memverifikasi integrasi antar komponen berjalan benar
- Melibatkan database, API, atau service eksternal secara terbatas
Perbedaan Unit Test dan Integration Test
Unit Test
- Mengisolasi satu unit kode
- Semua dependensi di-mock
- Sangat cepat dan deterministik
Integration Test
- Menguji alur lengkap antar modul
- Menggunakan dependensi nyata atau test database
- Lebih lambat karena melibatkan I/O
Jenis Integration Test
Database Integration
- Menguji repository atau DAO dengan database nyata
- Menggunakan test database atau in-memory database
- Memastikan query berjalan benar dan data tersimpan dengan benar
API Integration
- Menguji endpoint dengan request dan response nyata
- Memverifikasi routing, middleware, dan response format
- Bisa menggunakan supertest untuk HTTP request
Service Integration
- Menguji komunikasi antar service atau modul
- Memastikan kontrak antar service dipenuhi
- Contoh: service A mengirim data ke service B dengan format yang benar
Contoh Integration Test API
it('harus membuat user baru dan mengembalikan 201', async () => {
const response = await request(app)
.post('/api/users')
.send({ nama: 'Andi', email: 'andi@email.com' });
expect(response.status).toBe(201);
expect(response.body).toHaveProperty('id');
expect(response.body.nama).toBe('Andi');
});Test Database
- Gunakan database terpisah untuk test
- Reset data sebelum setiap test
- Gunakan transaksi dan rollback untuk menjaga isolasi
- In-memory database seperti SQLite bisa digunakan untuk kecepatan
Setup dan Teardown
beforeAll— dijalankan sekali sebelum semua testbeforeEach— dijalankan sebelum setiap testafterEach— dijalankan setelah setiap testafterAll— dijalankan sekali setelah semua test selesai
Praktik Terbaik
- Integration test lebih sedikit dari unit test
- Fokus pada alur kritis yang melibatkan banyak komponen
- Gunakan test database, jangan test di database production
- Bersihkan data setelah test selesai
- Isolasi antar test untuk menghindari side effect