Testing HTTP Handlers
HTTP handler'larni testlash
"HTTP Testing with httptest" darsida ko'rgan httptest.NewRequest/NewRecorder naqshini endi haqiqiy testing.T bilan birlashtiramiz — bu HTTP handler'larni sinashning to'liq, standart usuli.
package main
import (
"net/http"
"net/http/httptest"
"testing"
)
func pingHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("pong"))
}
func TestPingHandler(t *testing.T) {
req := httptest.NewRequest("GET", "/ping", nil)
rec := httptest.NewRecorder()
pingHandler(rec, req)
if rec.Code != http.StatusOK {
t.Errorf("status = %d, kutilgan %d", rec.Code, http.StatusOK)
}
if rec.Body.String() != "pong" {
t.Errorf("tana = %q, kutilgan %q", rec.Body.String(), "pong")
}
}Bu yerda yangi narsa yo'q — shunchaki avval o'rgangan httptest va testingni birlashtirdik. Handler'ni haqiqiy serverni ishga tushirmasdan, to'g'ridan-to'g'ri funksiya sifatida chaqirib, natijani (rec.Code, rec.Body) t.Errorf bilan tekshiramiz. %q format belgisi matnni tirnoq ichida chiqaradi — xato xabarida qaysi belgilar aynan noto'g'ri ekanini aniq ko'rish uchun qulay.
>_ Exercise
Salomlashuv handler'ini test bilan tekshiring.
- •greetHandler status 200 va "Salom!" tanasini qaytarishini tekshiring
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
httptest + testing.T — HTTP handler'larni haqiqiy server yoki tarmoqsiz, avtomatik tekshiriladigan tarzda sinashning standart birikmasi.
NEXT UP
HTTP Integration Tests
$ go run main.go
Kodingizni ishga tushiring