React Testing Library ile Entegrasyon Testleri
Testlerde bileşenleri oluşturun, olayları tetikleyin ve uygulamaya değil görünür çıktıya ilişkin doğrulamalar yapın.
React Testing Library ile Entegrasyon Testleri, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.
React Testing Library nedir?
React Testing Library (RTL), kullanıcı bakış açısıyla test yapmayı teşvik eder: bileşenleri oluşturun, kullanıcı gibi etkileşimde bulunun ve uygulama ayrıntıları yerine görünür çıktıyı doğrulayın.
Kurulum
RTL, Create React App ve Vite'ın React şablonuyla birlikte gelir. Elle kurulum için @testing-library/react ve @testing-library/jest-dom paketlerini yükleyin.
// package.json
// "@testing-library/react": "^14.0.0",
// "@testing-library/jest-dom": "^6.0.0"
// setupTests.ts
import '@testing-library/jest-dom';Bileşen oluşturma
render(), bir bileşeni sanal DOM'a bağlar. Oluşturulan çıktının kapsamına göre sorgu işlevleri döndürür.
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();
});Öğeleri sorgulama
Sorguları şu sırayla tercih edin: getByRole > getByLabelText > getByPlaceholderText > getByText. Rol sorguları erişilebilirlik anlamlarını eşleştirir.
// 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');Olayları tetikleme
@testing-library/user-event paketindeki userEvent işlevini (tercih edilir) veya fireEvent işlevini (temel düzeyde) kullanın. userEvent, odaklanma ve odağın kaybolması da dahil olmak üzere gerçek tarayıcı etkileşimlerini taklit eder.
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');
});Form gönderimini test etme
Formu oluşturun, girişleri userEvent.type ile doldurun, gönderme düğmesine tıklayın ve sonucu (başarı iletisi, gezinme veya geri çağırma çağrısı) doğrulayın.
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' });
});Görünürlüğü doğrulama
toBeInTheDocument(), toBeVisible() ve toHaveValue() gibi jest-dom eşleştiricileri doğrulamaları okunabilir hale getirir.
expect(screen.getByText('Error: required')).toBeInTheDocument();
expect(screen.getByRole('dialog')).toBeVisible();
expect(screen.getByRole('textbox')).toHaveValue('hello');
expect(screen.queryByText('Loading...')).not.toBeInTheDocument();Koşullu oluşturmayı test etme
Bir öğenin oluşturulmadığını doğrulamak için queryBy kullanın; öğe yoksa boş değer döndürür. Öğenin mevcut olmasını beklediğinizde getBy kullanın.
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();
});Sağlayıcılarla sarmalama
Çoğu bileşenin bir bağlama veya yönlendiriciye ihtiyacı vardır. Bunları render çağrısının içinde sağlayıcılarla sarın veya özel bir renderWithProviders yardımcısı oluşturun.
function renderWithProviders(ui: React.ReactElement) {
return render(
<QueryClientProvider client={new QueryClient()}>
<MemoryRouter>
{ui}
</MemoryRouter>
</QueryClientProvider>
);
}
test('shows user data', () => {
renderWithProviders(<UserProfile />);
});Durum değişikliklerini test etme
Bileşenle etkileşimde bulunun, ardından yeni durumun kullanıcı arayüzüne yansıdığını doğrulayın. RTL, userEvent kullanıldığında çoğu etkileşimi otomatik olarak act içinde sarar.
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();
});Ekran hata ayıklama yardımcısı
Mevcut oluşturulmuş HTML'yi konsola yazdırmak için screen.debug() çağırın. Bu, bir sorgu başarısız olduğunda gerçekte neyin oluşturulduğunu görmek için kullanışlıdır.
test('debugging a failing query', () => {
render(<MyComponent />);
screen.debug(); // prints rendered HTML
screen.getByRole('button', { name: /save/i }); // then inspect output
});Hızlı kontrol
React Testing Library'de bir düğmeyi test ederken hangi sorguyu tercih etmelisiniz?
Özet
RTL, bileşenleri oluşturur ve rol tabanlı sorgular ile userEvent aracılığıyla bunlarla etkileşime girer. Bileşenleri gerekli sağlayıcılarla sarın, okunabilir doğrulamalar için jest-dom eşleştiricilerini kullanın ve yokluğu doğrularken queryBy işlevini tercih edin.
Sıkça Sorulan Sorular
“React Testing Library ile Entegrasyon Testleri” dersi ücretsiz mi?
Evet — “React Testing Library ile Entegrasyon Testleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.
“React Testing Library ile Entegrasyon Testleri” dersinde ne öğreneceğim?
Testlerde bileşenleri oluşturun, olayları tetikleyin ve uygulamaya değil görünür çıktıya ilişkin doğrulamalar yapın. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
React Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“React Testing Library ile Entegrasyon Testleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu React Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- React Testing Library ile Entegrasyon Testleri
- MSW ile Asenkron Arayüzü ve API Çağrılarını Test Etme
- React için Playwright'a Başlangıç
- Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme