Как покрыть тестами _, err = w.Write(res)?

Добрый день!
Есть функция:
func Respond(w http.ResponseWriter, data map[string]interface{}) {
	w.Header().Set("Access-Control-Allow-Origin", "*")
	w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
	w.Header().Set("Access-Control-Allow-Headers", "Accept, Authorization, Content-Type, X-CSRF-Token")
	w.Header().Set("Content-Type", "application/json")
	res, err := json.Marshal(data)
	if err != nil {
		log.Printf("marshal error: %v", err)
	}
	_, err = w.Write(res)
	if err != nil {
		log.Printf("write error: %v", err)
	}
}

Так же уже есть тест, но он покрывает только 90%
func TestRespond(t *testing.T) {
	w := httptest.NewRecorder()
	w.WriteHeader(500)
	x := map[string]interface{}{
		"foo": make(chan int),
	}
	Respond(w, x)
}


Сориентируйте, как покрыть тестами следующую часть кода?
_, err = w.Write(res)
if err != nil {
	log.Printf("write error: %v", err)
}
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@rustler2000
погромист сикраш
Это вот реально такой тест или просто проверки после Respond(w, x) вырезаны?

Очевидно, что придется сделать свой ResponseRecorder который будет на Write выдавать ошибку.
Типа https://play.golang.org/p/eqUpcDqPrKN
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
//In func TestRespond(t *testing.T)
resp := w.Result() //Give you *http.Responce
body, _ := ioutil.ReadAll(resp.Body) //Responce body written in *bytes.Buffer You can read it
//Check it
if resp.StatusCode ...........{
    t.Errorf(........)
}
if body ............ {
    t.Errorf(........)
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы