Сервер возвращает 400, когда пользователь существует - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю над некоторыми тестами в Go и провел последние 2 дня, пытаясь заставить его работать, но я не мог.Моя проблема в том, что тест возвращает 400, даже когда пользователь существует.

Это моя функция getUser

func (handler *UserHandler) getUser(w http.ResponseWriter, ID int) {
    logfile, err := os.OpenFile("events.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("Error opening file: %v", err)
    }
    defer logfile.Close()
    log.SetOutput(logfile)

    user := db.Fetch(ID)

    userJSON, err := json.Marshal(user)
    if err != nil {
        log.Printf("Error while marshaling the user into JSON: %v", err)
        return
    }

    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)

    // userJSON is sent as http Response
    w.Write(userJSON)
}

Это мой UserHandler

type UserHandler struct{}

func (handle *UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    var head string
    head, r.URL.Path = ShiftPath(r.URL.Path)
    id, err := strconv.Atoi(head)
    if err != nil {
        http.Error(w, fmt.Sprintf("Invalid user ID %q", head), http.StatusBadRequest)
        return
    }
    switch r.Method {
    case "GET":
        handle.getUser(w, id)
    default:
        http.Error(w, "Only GET is allowed", http.StatusMethodNotAllowed)
    }
}

func ShiftPath(p string) (head, tail string) {
    p = path.Clean("/" + p)
    i := strings.Index(p[1:], "/") + 1
    if i <= 0 {
        return p[1:], "/"
    }
    return p[1:i], p[i:]
}

И этомой тест

func TestGetUser(t *testing.T) {
    handler := new(UserHandler)
    mux := http.NewServeMux()
    mux.HandleFunc("/user/", handler.ServeHTTP)

    writer := httptest.NewRecorder()
    request, _ := http.NewRequest("GET", "/user/12", nil)
    mux.ServeHTTP(writer, request)

    if writer.Code != 200 {
        t.Errorf("Response code is %v", writer.Code)
    }
}

1 Ответ

0 голосов
/ 16 февраля 2019

Проблема с кодом ====> id, err: = strconv.Atoi (head) Из-за ошибки вы видите возврат, и, следовательно, вы видите ошибку 400.

Полностью функциональный код вашего сервера с действительнымлогика.

Предложение: Всегда печатать или отлаживать построчно.Вы можете найти проблему и первопричину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...