Jangan biarkan bug sampai ke user. Pelajari teknik pengujian dari komponen terkecil hingga alur aplikasi menyeluruh.
Validasi logika komponen secara terisolasi menggunakan Jest.
Unit testing adalah fondasi piramida pengujian. Fokusnya memastikan fungsi kecil bekerja sesuai harapan tanpa mempedulikan dependensi luar.
import { render, screen, fireEvent } from '@testing-library/react';
import Counter from './Counter';
describe('Counter Component', () => {
test('renders initial count', () => {
render( );
const count = screen.getByText(/count: 0/i);
expect(count).toBeInTheDocument();
});
test('increments count', () => {
render( );
const btn = screen.getByRole('button');
fireEvent.click(btn);
expect(screen.getByText(/count: 1/i)).toBeInTheDocument();
});
});
Memastikan beberapa unit bekerja harmonis saat disatukan.
test('submits form with data', async () => {
const onSubmit = jest.fn();
render( );
fireEvent.change(screen.getByLabelText(/email/i), {
target: { value: 'user@test.com' }
});
fireEvent.click(screen.getByRole('button'));
await waitFor(() => {
expect(onSubmit).toHaveBeenCalledWith({
email: 'user@test.com'
});
});
});
Integration test memeriksa interaksi antar komponen, seperti bagaimana input field berinteraksi dengan tombol submit.
Gunakan waitFor untuk menangani operasi asinkron seperti API call.
Simulasi perilaku user sungguhan dari awal hingga akhir.
Bot membuka halaman login.
Mengisi email & password valid.
Memastikan user masuk ke dashboard.
describe('Auth Flow', () => {
it('should login successfully', () => {
cy.visit('/login');
cy.get('[data-cy=email]')
.type('admin@saung.com');
cy.get('[data-cy=pass]')
.type('secret123');
cy.get('button[type=submit]')
.click();
cy.url().should('include', '/dashboard');
});
});