0Pricing
React Academy · Pelajaran

Pengujian Integrasi dengan React Testing Library

Render komponen dalam pengujian, picu event, dan pastikan output yang terlihat, bukan implementasinya.

Pengujian Integrasi dengan React Testing Library adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Apa Itu React Testing Library?

React Testing Library (RTL) mendorong pengujian dari sudut pandang pengguna: tampilkan komponen, berinteraksilah dengannya seperti pengguna, dan verifikasi hasil yang terlihat, bukan detail implementasi.

Penyiapan

RTL disertakan dalam Create React App dan templat React milik Vite. Untuk penyiapan manual, pasang @testing-library/react dan @testing-library/jest-dom.

// package.json
// "@testing-library/react": "^14.0.0",
// "@testing-library/jest-dom": "^6.0.0"

// setupTests.ts
import '@testing-library/jest-dom';

Menampilkan Komponen

render() memasang komponen di DOM virtual. Fungsi ini mengembalikan fungsi kueri yang cakupannya terbatas pada hasil yang ditampilkan.

import { render, screen } from '@testing-library/react';
import { Button } from './Button';

test('renders button label', () => {
  render(<Button label="Submit" onClick={() => {}} />);
  expect(screen.getByText('Submit')).toBeInTheDocument();
});

Mencari Elemen

Utamakan kueri dalam urutan berikut: getByRole > getByLabelText > getByPlaceholderText > getByText. Kueri berdasarkan peran mencocokkan semantik aksesibilitas.

// Best: query by role
const button = screen.getByRole('button', { name: /submit/i });

// Good: query by label (for form inputs)
const input = screen.getByLabelText('Email address');

// Acceptable: query by text
const heading = screen.getByText('Welcome');

Memicu Peristiwa

Gunakan userEvent dari @testing-library/user-event (yang disarankan) atau fireEvent (dasar). userEvent menyimulasikan interaksi peramban nyata, termasuk fokus dan kehilangan fokus.

import userEvent from '@testing-library/user-event';

test('types into input', async () => {
  const user = userEvent.setup();
  render(<SearchBar />);
  const input = screen.getByRole('textbox');
  await user.type(input, 'react');
  expect(input).toHaveValue('react');
});

Menguji Pengiriman Formulir

Tampilkan formulir, isi masukan dengan userEvent.type, klik tombol kirim, lalu verifikasi hasilnya (pesan berhasil, navigasi, atau pemanggilan panggilan balik).

test('submits the login form', async () => {
  const onLogin = jest.fn();
  const user = userEvent.setup();
  render(<LoginForm onLogin={onLogin} />);

  await user.type(screen.getByLabelText('Email'), 'test@example.com');
  await user.type(screen.getByLabelText('Password'), 'password123');
  await user.click(screen.getByRole('button', { name: /log in/i }));

  expect(onLogin).toHaveBeenCalledWith({ email: 'test@example.com', password: 'password123' });
});

Memverifikasi Visibilitas

Pencocok jest-dom seperti toBeInTheDocument(), toBeVisible(), dan toHaveValue() membuat verifikasi mudah dibaca.

expect(screen.getByText('Error: required')).toBeInTheDocument();
expect(screen.getByRole('dialog')).toBeVisible();
expect(screen.getByRole('textbox')).toHaveValue('hello');
expect(screen.queryByText('Loading...')).not.toBeInTheDocument();

Menguji Penampilan Kondisional

Gunakan queryBy (mengembalikan null ketika tidak ada) untuk memverifikasi bahwa elemen tidak ditampilkan. Gunakan getBy ketika Anda mengharapkannya ada.

test('shows error message when validation fails', async () => {
  const user = userEvent.setup();
  render(<SignUpForm />);
  await user.click(screen.getByRole('button', { name: /submit/i }));
  expect(screen.getByText('Email is required')).toBeInTheDocument();
});

Membungkus dengan Penyedia

Sebagian besar komponen memerlukan konteks atau perute. Bungkus komponen dalam penyedia di dalam pemanggilan render, atau buat pembantu renderWithProviders khusus.

function renderWithProviders(ui: React.ReactElement) {
  return render(
    <QueryClientProvider client={new QueryClient()}>
      <MemoryRouter>
        {ui}
      </MemoryRouter>
    </QueryClientProvider>
  );
}

test('shows user data', () => {
  renderWithProviders(<UserProfile />);
});

Menguji Perubahan Keadaan

Lakukan tindakan pada komponen, lalu verifikasi bahwa keadaan baru tercermin di antarmuka pengguna. RTL membungkus sebagian besar interaksi dalam act secara otomatis ketika menggunakan userEvent.

test('counter increments', async () => {
  const user = userEvent.setup();
  render(<Counter />);
  expect(screen.getByText('Count: 0')).toBeInTheDocument();
  await user.click(screen.getByRole('button', { name: /increment/i }));
  expect(screen.getByText('Count: 1')).toBeInTheDocument();
});

Pembantu debug Layar

Panggil screen.debug() untuk mencetak HTML yang sedang ditampilkan ke konsol—berguna ketika kueri gagal dan Anda perlu melihat apa yang sebenarnya ditampilkan.

test('debugging a failing query', () => {
  render(<MyComponent />);
  screen.debug(); // prints rendered HTML
  screen.getByRole('button', { name: /save/i }); // then inspect output
});

Pemeriksaan Cepat

Kueri mana yang sebaiknya diutamakan saat menguji tombol di React Testing Library?

Ringkasan

Pengujian RTL menampilkan komponen dan berinteraksi dengannya melalui kueri berbasis peran serta userEvent. Bungkus komponen dalam penyedia yang diperlukan, gunakan pencocok jest-dom untuk verifikasi yang mudah dibaca, dan utamakan queryBy saat memverifikasi ketidakhadiran.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengujian Integrasi dengan React Testing Library” gratis?

Ya — teks lengkap “Pengujian Integrasi dengan React Testing Library” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengujian Integrasi dengan React Testing Library”?

Render komponen dalam pengujian, picu event, dan pastikan output yang terlihat, bukan implementasinya. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Pengujian Integrasi dengan React Testing Library” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengujian Integrasi dengan React Testing Library
  2. Menguji UI Asinkron & Pemanggilan API dengan MSW
  3. Memulai dengan Playwright untuk React
  4. Menguji Formulir & Alur Pengguna dari Awal hingga Akhir
← Kembali ke React Academy