Unit Test #
Unit testing dalam TypeScript adalah proses pengujian bagian kecil dari kode, yang dikenal sebagai unit, secara terisolasi untuk memastikan bahwa bagian tersebut berfungsi sesuai dengan yang diharapkan. Unit testing membantu dalam menemukan dan memperbaiki bug sejak dini, memastikan bahwa setiap unit kode berfungsi secara independen dan sesuai dengan spesifikasinya.
Mengapa Unit Testing Penting? #
Unit testing sangat penting dalam pengembangan perangkat lunak karena:
- Mendeteksi Bug Lebih Dini: Mengidentifikasi masalah pada tahap awal pengembangan, sehingga lebih mudah dan murah untuk diperbaiki.
- Meningkatkan Kepercayaan: Dengan memastikan setiap unit kode berfungsi dengan benar, Anda bisa lebih percaya diri bahwa kode Anda stabil dan bebas dari bug.
- Dokumentasi: Test case sering kali berfungsi sebagai dokumentasi hidup dari fungsi kode.
- Refaktorasi Aman: Dengan adanya unit test, Anda dapat melakukan refaktorasi kode tanpa khawatir akan merusak fungsionalitas yang sudah ada.
Menyiapkan Lingkungan Unit Testing #
Untuk menulis dan menjalankan unit test di TypeScript, Anda memerlukan beberapa alat dan pustaka, seperti:
- Framework Pengujian: Seperti Jest, Mocha, atau Jasmine.
- Assertion Library: Untuk membandingkan hasil yang diharapkan dengan hasil aktual, biasanya sudah termasuk dalam framework pengujian seperti Jest.
- Test Runner: Untuk menjalankan test case. Biasanya, framework pengujian juga berfungsi sebagai test runner.
Contoh Menggunakan Jest: Jest adalah framework pengujian yang sangat populer untuk JavaScript dan TypeScript.
-
Instalasi Jest dan TypeScript Support:
npm install --save-dev jest ts-jest @types/jest
jest
: Framework pengujian.ts-jest
: Preset untuk menggunakan Jest dengan TypeScript.@types/jest
: Definisi tipe untuk Jest agar kompatibel dengan TypeScript.
-
Mengonfigurasi Jest untuk TypeScript:
Buat file konfigurasi Jest (
jest.config.js
):module.exports = { preset: 'ts-jest', testEnvironment: 'node', };
preset: 'ts-jest'
: Memberitahu Jest untuk menggunakants-jest
untuk menangani file TypeScript.testEnvironment: 'node'
: Menentukan lingkungan pengujian, dalam hal ini Node.js.
Menulis Unit Test #
Setelah konfigurasi selesai, Anda bisa mulai menulis unit test.
Contoh Fungsi yang Akan Diuji:
// math.ts
export function add(a: number, b: number): number {
return a + b;
}
export function subtract(a: number, b: number): number {
return a - b;
}
Contoh Unit Test:
// math.test.ts
import { add, subtract } from './math';
describe('Math functions', () => {
test('should add two numbers correctly', () => {
expect(add(1, 2)).toBe(3);
expect(add(-1, 1)).toBe(0);
});
test('should subtract two numbers correctly', () => {
expect(subtract(5, 2)).toBe(3);
expect(subtract(5, 5)).toBe(0);
});
});
describe
: Grup untuk mengelompokkan beberapa test case yang berhubungan.test
atauit
: Mendefinisikan satu unit test.expect
: Fungsi untuk melakukan assertion, membandingkan hasil aktual dengan hasil yang diharapkan.toBe
: Matcher yang memeriksa apakah nilai yang diuji sama dengan nilai yang diharapkan.
Menjalankan Unit Test #
Untuk menjalankan unit test, Anda cukup menjalankan perintah berikut di terminal:
npx jest
Jest akan secara otomatis menemukan file dengan ekstensi .test.ts
atau .spec.ts
dan menjalankan semua test case di dalamnya.
Mocking dalam Unit Testing #
Kadang-kadang, Anda perlu menguji bagian kode yang bergantung pada fungsi atau layanan eksternal. Dalam kasus seperti itu, Anda dapat menggunakan mocking untuk menggantikan dependensi eksternal dengan versi tiruan (mock) yang memungkinkan pengujian terisolasi.
Contoh Mocking dengan Jest:
// api.ts
export async function fetchData(): Promise<string> {
// Asumsikan ini memanggil API eksternal
return 'real data';
}
// service.ts
import { fetchData } from './api';
export async function getData(): Promise<string> {
const data = await fetchData();
return `Processed ${data}`;
}
Unit Test dengan Mocking:
// service.test.ts
import { getData } from './service';
import { fetchData } from './api';
jest.mock('./api'); // Mock modul api
test('should process mocked data', async () => {
(fetchData as jest.Mock).mockResolvedValue('mocked data'); // Mocking nilai balik
const result = await getData();
expect(result).toBe('Processed mocked data');
});
jest.mock()
: Memmock seluruh modul.mockResolvedValue
: Mengatur nilai yang akan dikembalikan oleh mock untuk fungsi asinkron.
Code Coverage #
Code coverage adalah metrik yang menunjukkan berapa banyak kode yang diuji oleh unit test. Jest memiliki dukungan built-in untuk mengukur code coverage.
Untuk menjalankan Jest dengan laporan code coverage:
npx jest --coverage
Jest akan menghasilkan laporan yang menunjukkan persentase kode yang diuji oleh unit test Anda.
Kesimpulan #
Unit testing dalam TypeScript merupakan bagian penting dari siklus pengembangan perangkat lunak yang membantu memastikan kualitas dan stabilitas kode. Dengan menggunakan framework seperti Jest, Anda dapat menulis, menjalankan, dan mengelola unit test secara efisien. Mocking dan code coverage juga membantu dalam pengujian yang lebih komprehensif dan mendalam, memberikan keyakinan bahwa aplikasi Anda akan bekerja sesuai dengan yang diharapkan dalam berbagai situasi.