CodeBlanks Logo Icon CodeBlanks

Supertest

supertest ile HTTP test öğrenirsin.

Supertest

Supertest, Express uygulamalarını gerçek HTTP isteği atmadan test etmeyi sağlayan bir kütüphanedir. Uygulamayı bellekte çağırır; gerçek bir kapı (port) açmaz. Bu, testleri hızlı ve izole yapar.

Örnek: const request = require("supertest"); const app = require("./app"); request(app).get("/users").expect(200);. Bu, app'e bellekte bir GET /users isteği atar ve yanıtın 200 olmasını bekler. Supertest, Express'in app.listen'ini atlar; bunun yerine http.createServer(app)'i doğrudan çağırır. Bu yüzden testler için app.listen kodu çağrılmaz. Supertest, zincir yapısıyla okunaklı testler yazmayı sağlar: request(app).get("/").expect(200).expect("Content-Type", /json/).

Zincir test yapısı

Supertest'in gücü, zincir (chain) yapısındadır. request(app).get(yol).expect(status) tek bir satırda hem isteği atar hem yanıtın durumunu doğrular. Birden çok .expect de zincirlenebilir.

Örnek: request(app).post("/users").send({ name: "Ayşe" }).expect(201).expect("Content-Type", /json/);. Bu, POST /users isteğini { name: "Ayşe" } gövdesiyle atar; yanıtın 201 olmasını ve JSON içerik türünü bekler. .send gövde, .expect doğrulama yapar. Zincir, testin okunaklılığını artırır. Bir testte birden çok doğrulama zincirlenirse hepsi geçmeli; biri bile başarısız olursa test başarısız olur. Bu yüzden her test tek bir davranışa odaklanmalıdır.

Uygulama supertest ile GET testi yaz

supertest modülünü require ile içe aktar. app'i require("./app") ile içe aktar. const request = require("supertest") sonrası console.log ile "supertest hazır" yaz.

Başlangıç kodu

index.js
// supertest ve app içe aktar
// buraya yaz

// "supertest hazır" yazdır
// buraya yaz

Örnek çözüm

index.js
const request = require("supertest");
const app = require("./app");
console.log("supertest hazır");

Beklenen çıktı

supertest hazır

Soru ve cevaplar

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

1 request çağrısını tamamla

Soru
const request = require(____);
Cevap
const request = require("supertest");

Açıklama: supertest modülü "supertest" adıyla yüklenir.

2 Metodu rolüne eşle

Kavram Anlamı
request(app) İstek başlatır
.get/.post HTTP metodunu belirler
.send Gövde ekler
.expect Doğrulama yapar

3 Supertest neden gerçek bir port açmaz?

index.js
request(app).get('/users')
  • Çünkü test yavaş olur
  • Çünkü Express çalışmaz
  • Çünkü app.listen'i atlar
  • Çünkü app'i bellekte çağırır Doğru cevap

Açıklama: Supertest app'i bellekte çağırır.

İleri seviye bölümündeki tüm dersler