CodeBlanks Logo Icon CodeBlanks

React Testing Library

RTL ile bileşen testi yazmanın temelini öğrenirsin.

React Testing Library

React Testing Library (RTL), bileşenleri kullanıcı gözüyle test eden bir kütüphanedir. DOM düğümlerini sorgulayıp iddialarda bulunursun; iç uygulamayı değil, gerçek kullanıcı deneyimini test edersin.

RTL'nin temel felsefesi uygulamanızı kullanıcıların kullanma biçimine yakın test etmektir. Bu yüzden data-testid yerine erişilebilir sorguları (getByRole, getByText) önerir.

Bu yaklaşım, iç refactor yapsan bile testlerin bozulmamasını sağlar; çünkü test kullanıcı arayüzüne bakar, uygulamanın içine değil.

render ve screen

render bileşenini sanal bir DOM'a basar ve sorgu fonksiyonları döndürür. screen ise belgeye bağlı global sorgular sağlar; çoğu testte screen.getByText gibi metodları kullanırsın.

Modern RTL'de screen kullanımı önerilir; çünkü import listesini kısa tutar ve sorguların belgeden bağımsız çalışmasını sağlar.

getBy bulamazsa hata fırlatır; queryBy null döner; findBy eşzamansız bekler.

Uygulama İlk RTL testi

Greeting bileşenini name="Dünya" propu ile render eden, ekranda "Merhaba Dünya" metnini screen.getByText ile bulan ve expect(...).toBeInTheDocument() ile doğrulayan bir test yaz. Test test() veya it() ile sarılı olsun.

Başlangıç kodu

App.jsx
import { render, screen } from "@testing-library/react";
import { Greeting } from "./Greeting";

// testi buraya yaz

Örnek çözüm

App.jsx
import { render, screen } from "@testing-library/react";
import { Greeting } from "./Greeting";

test("greeting shows text", () => {
  render(<Greeting name="Dünya" />);
  expect(screen.getByText("Merhaba Dünya")).toBeInTheDocument();
});

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 RTL'nin temel felsefesi nedir?

  • İç state'i doğrulamak
  • Kullanıcı gibi test etmek Doğru cevap
  • Hook'ları taklit etmek
  • Sınıf bileşenlerini çağırmak

Açıklama: RTL, kullanıcı deneyimine en yakın şekilde test yazmayı hedefler.

2 screen ile metin arama

Soru
import { render, screen } from "@testing-library/react";

render(<Button>Sil</Button>);

const btn = screen.____("Sil");
Cevap
import { render, screen } from "@testing-library/react";

render(<Button>Sil</Button>);

const btn = screen.getByText("Sil");

Açıklama: screen.getByText metni arar.

3 Sorgu tiplerini eşleştir

Kavram Anlamı
render DOM'a basar
screen Global sorgu
getByText Metin arar
findByText Eşzamansız bekler

Orta seviye bölümündeki tüm dersler