Pendahuluan
Testing merupakan bagian penting dalam siklus pengembangan perangkat lunak. Dengan melakukan testing, kita dapat memastikan bahwa kode yang kita tulis bekerja sebagaimana mestinya dan meminimalkan risiko bug yang muncul di masa depan. Jest adalah salah satu framework testing yang populer dan banyak digunakan oleh pengembang JavaScript. Dalam artikel ini, kita akan membahas secara detail tentang Jest, mulai dari dasar-dasarnya hingga contoh-contoh yang lebih kompleks.
Apa itu Jest?
Jest adalah framework testing JavaScript yang dikembangkan oleh Facebook. Ia dirancang untuk menjadi mudah digunakan, cepat, dan terintegrasi dengan baik dengan framework JavaScript populer seperti React, Vue, dan Angular. Jest memiliki sejumlah fitur yang membuatnya menjadi pilihan yang populer untuk testing kode JavaScript, di antaranya:
- Mudah Digunakan: Jest memiliki sintaks yang sederhana dan mudah dipahami, bahkan bagi pengembang pemula.
- Cepat: Jest dirancang untuk menjalankan test dengan cepat, sehingga pengembang dapat memperoleh feedback yang cepat tentang kode yang mereka tulis.
- Terintegrasi: Jest terintegrasi dengan baik dengan framework JavaScript populer dan menyediakan alat-alat yang berguna untuk testing komponen, function, dan module.
- Snapshot Testing: Jest memungkinkan kita untuk membuat snapshot dari output function atau komponen, sehingga kita dapat dengan mudah mendeteksi perubahan yang tidak diinginkan.
- Mocking: Jest menyediakan alat-alat untuk mocking function atau module, sehingga kita dapat mengisolasi kode yang sedang kita test.
Menginstal Jest
Untuk menginstal Jest, kita dapat menggunakan package manager seperti npm atau yarn.
npm install --save-dev jest
Atau
yarn add --dev jest
Setelah Jest terinstal, kita dapat membuat file konfigurasi bernama jest.config.js di root directory proyek kita. File konfigurasi ini memungkinkan kita untuk menyesuaikan perilaku Jest, seperti menentukan lokasi file test, mengubah timeout, dan lain-lain. Berikut adalah contoh file konfigurasi Jest:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
setupFilesAfterEnv: ['./src/setupTests.ts'],
transform: {
'^.+\\.[tj]sx?{{content}}#39;: 'ts-jest'
}
};
Menulis Test dengan Jest
Menulis Test Sederhana
Mari kita mulai dengan contoh sederhana. Katakanlah kita memiliki file JavaScript bernama calculator.js dengan function sederhana:
function sum(a, b) {
return a + b;
}
module.exports = { sum };
Kita dapat menulis test untuk function sum
menggunakan Jest seperti berikut:
const { sum } = require('./calculator');
test('sum adds two numbers', () => {
expect(sum(1, 2)).toBe(3);
});
Dalam contoh di atas, kita menggunakan test
untuk mendefinisikan blok test. Di dalam blok test, kita menggunakan expect
untuk melakukan assertion. expect(sum(1, 2)).toBe(3)
berarti kita mengharapkan hasil dari sum(1, 2)
untuk sama dengan 3.
Menggunakan Matchers
Jest menyediakan berbagai macam matchers yang dapat kita gunakan untuk membuat assertion yang lebih kompleks. Beberapa matchers yang umum digunakan antara lain:
toBe
: Memeriksa apakah dua nilai sama.toEqual
: Memeriksa apakah dua nilai sama, termasuk object dan array.toBeTruthy
: Memeriksa apakah nilai bernilai truthy.toBeFalsy
: Memeriksa apakah nilai bernilai falsy.toBeGreaterThan
: Memeriksa apakah nilai lebih besar dari nilai lainnya.toBeLessThan
: Memeriksa apakah nilai lebih kecil dari nilai lainnya.toContain
: Memeriksa apakah array mengandung nilai tertentu.
Berikut adalah contoh penggunaan beberapa matchers:
test('toBe', () => {
expect(1).toBe(1);
});
test('toEqual', () => {
const obj1 = { name: 'John' };
const obj2 = { name: 'John' };
expect(obj1).toEqual(obj2);
});
test('toBeTruthy', () => {
expect(true).toBeTruthy();
});
test('toBeFalsy', () => {
expect(false).toBeFalsy();
});
test('toBeGreaterThan', () => {
expect(5).toBeGreaterThan(3);
});
test('toBeLessThan', () => {
expect(3).toBeLessThan(5);
});
test('toContain', () => {
const numbers = [1, 2, 3];
expect(numbers).toContain(2);
});
Menjalankan Test
Untuk menjalankan test yang telah kita tulis, kita dapat menjalankan perintah berikut di terminal:
npm test
Atau
yarn test
Jest akan mencari file test dengan ekstensi .test.js atau .spec.js dan menjalankannya.
Snapshot Testing
Snapshot testing adalah teknik testing yang memungkinkan kita untuk membuat snapshot dari output function atau komponen. Setiap kali test dijalankan, Jest akan membandingkan output function atau komponen dengan snapshot yang telah dibuat sebelumnya. Jika ada perubahan yang tidak diinginkan, test akan gagal dan kita akan mendapatkan informasi tentang perubahan tersebut.
Untuk membuat snapshot dengan Jest, kita dapat menggunakan function toMatchSnapshot()
. Berikut adalah contoh:
test('renders a component', () => {
const component = renderer.create(<MyComponent />);
expect(component.toJSON()).toMatchSnapshot();
});
Dalam contoh di atas, kita menggunakan toMatchSnapshot()
untuk membandingkan output dari component.toJSON()
dengan snapshot yang telah dibuat sebelumnya. Jika output berubah, test akan gagal dan kita akan mendapatkan informasi tentang perubahan tersebut.
Mocking
Mocking adalah teknik yang memungkinkan kita untuk mengisolasi kode yang sedang kita test. Dengan mocking, kita dapat mengganti function atau module yang sebenarnya dengan mock yang telah kita buat. Ini memungkinkan kita untuk mengontrol perilaku function atau module yang di-mock dan memastikan bahwa test hanya berfokus pada kode yang sedang kita test.
Jest menyediakan beberapa cara untuk melakukan mocking. Salah satu cara yang paling umum adalah dengan menggunakan jest.fn()
. jest.fn()
adalah function yang dapat kita gunakan untuk membuat mock dari function lain. Berikut adalah contoh:
const { sum } = require('./calculator');
jest.mock('./calculator', () => ({
sum: jest.fn(() => 10)
}));
test('sum returns a mocked value', () => {
expect(sum(1, 2)).toBe(10);
});
Dalam contoh di atas, kita mock function sum
dari module calculator
dengan jest.fn(() => 10)
. Ini berarti bahwa setiap kali function sum
dipanggil, ia akan mengembalikan nilai 10.
Kesimpulan
Jest adalah framework testing yang powerful dan mudah digunakan untuk pengembang JavaScript. Ia menyediakan berbagai macam fitur dan alat-alat yang dapat membantu kita dalam menulis test yang efektif dan efisien. Dengan menggunakan Jest, kita dapat meningkatkan kualitas kode yang kita tulis dan memastikan bahwa aplikasi kita bekerja sebagaimana mestinya.