GoDasturchi
Testing HTTP Handlers

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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