Node.js
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.
Örnek çözümü göster
const request = require("supertest");
const app = require("./app");
console.log("supertest hazır");
Kendini test et
-
request çağrısını tamamla
const request = require(____);
Cevabı göster
const request = require("supertest");
-
Metodu rolüne eşle
- request(app)
- İstek başlatır
- .get/.post
- HTTP metodunu belirler
- .send
- Gövde ekler
- .expect
- Doğrulama yapar
-
Supertest neden gerçek bir port açmaz?
request(app).get('/users')
- Çünkü test yavaş olur
- Çünkü Express çalışmaz
- Çünkü app.listen'i atlar
- Çünkü app'i bellekte çağırır
Cevabı göster
Çünkü app'i bellekte çağırır — Supertest app'i bellekte çağırır.
Sıradaki ders: Test database