React Academy · Pelajaran

Pengujian Integrasi dengan React Testing Library

Paparkan komponen dalam ujian, cetuskan peristiwa dan buat penegasan pada output yang kelihatan, bukan pelaksanaan.

Pelajaran 1 daripada 413 langkah

Pengujian Integrasi dengan React Testing Library ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah Pustaka Ujian React?

Pustaka Ujian React (RTL) menggalakkan pengujian dari sudut pandangan pengguna: paparkan komponen, berinteraksi dengannya seperti yang dilakukan oleh pengguna dan buat penegasan terhadap hasil yang kelihatan, bukannya butiran pelaksanaan.

Persediaan

RTL disertakan bersama Create React App dan templat React Vite. Untuk persediaan 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';

Memaparkan Komponen

render() memasang komponen dalam DOM maya. Ia mengembalikan fungsi pertanyaan yang terhad kepada hasil yang dipaparkan.

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 pertanyaan mengikut susunan ini: getByRole > getByLabelText > getByPlaceholderText > getByText. Pertanyaan berdasarkan peranan sepadan dengan semantik kebolehaksesan.

// 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');

Mencetuskan Peristiwa

Gunakan userEvent daripada @testing-library/user-event (disyorkan) atau fireEvent (asas). userEvent mensimulasikan interaksi pelayar sebenar termasuk fokus dan kabur.

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 Penghantaran Borang

Petakan borang, isikan medan dengan userEvent.type, klik hantar dan buat penegasan terhadap hasilnya (mesej berjaya, navigasi atau panggilan 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' });
});

Membuat Penegasan tentang Keterlihatan

Pemadan jest-dom seperti toBeInTheDocument(), toBeVisible() dan toHaveValue() menjadikan penegasan lebih 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 Paparan Bersyarat

Gunakan queryBy (mengembalikan null apabila tiada) untuk membuat penegasan bahawa elemen tidak dipaparkan. Gunakan getBy apabila anda menjangkakan elemen tersebut wujud.

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();
});

Membalut dengan Pembekal

Kebanyakan komponen memerlukan konteks atau penghala. Balut komponen tersebut dalam pembekal di dalam panggilan render atau cipta pembantu renderWithProviders tersuai.

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, kemudian buat penegasan bahawa keadaan baharu ditunjukkan dalam antara muka pengguna. RTL membalut kebanyakan interaksi dalam act secara automatik apabila 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 Nyahpepijat Skrin

Panggil screen.debug() untuk mencetak HTML yang sedang dipaparkan ke konsol — berguna apabila pertanyaan gagal dan anda perlu melihat perkara yang sebenarnya dipaparkan.

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

Semakan Pantas

Pertanyaan manakah yang patut diutamakan apabila menguji butang dalam Pustaka Ujian React?

Rumusan

RTL menguji komponen dengan memaparkannya dan berinteraksi dengannya melalui pertanyaan berasaskan peranan serta userEvent. Balut komponen dalam pembekal yang diperlukan, gunakan pemadan jest-dom untuk penegasan yang mudah dibaca dan utamakan queryBy apabila membuat penegasan tentang ketiadaan elemen.

Percuma untuk bermula

Pelajari React dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
88
Pelajaran
324

Soalan Lazim

Adakah pelajaran “Pengujian Integrasi dengan React Testing Library” percuma?

Ya — teks penuh “Pengujian Integrasi dengan React Testing Library” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengujian Integrasi dengan React Testing Library”?

Paparkan komponen dalam ujian, cetuskan peristiwa dan buat penegasan pada output yang kelihatan, bukan pelaksanaan. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan React Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pengujian Integrasi dengan React Testing Library” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengujian Integrasi dengan React Testing Library
  2. Menguji Antara Muka Tak Segerak & Panggilan API dengan MSW
  3. Bermula dengan Playwright untuk React
  4. Menguji Borang & Aliran Pengguna dari Hujung ke Hujung
← Kembali ke React Academy