Тест не в состоянии захватить выходные данные регистрации - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь проверить мою UserRegister функциональность, требуется http запрос.

Если пользователь вводит уже существующее электронное письмо, UserRegister возвращает журнал ошибок (используя logrus).

logs "github.com/sirupsen/logrus"

func UserRegister(res http.ResponseWriter, req *http.Request) {

    requestID := req.FormValue("uid")
    email := req.FormValue("email")

    logs.WithFields(logs.Fields{
        "Service":  "User Service",
        "package":  "register",
        "function": "UserRegister",
        "uuid":     requestID,
        "email":    email,
    }).Info("Received data to insert to users table")

    // check user entered new email address
    hasAccount := checkemail.Checkmail(email, requestID) // returns true/false

    if hasAccount != true { // User doesn't have an account

        db := dbConn()

        // Inserting token to login_token table
        insertUser, err := db.Prepare("INSERT INTO users (email) VALUES(?)")
        if err != nil {
            logs.WithFields(logs.Fields{
                "Service":  "User Service",
                "package":  "register",
                "function": "UserRegister",
                "uuid":     requestID,
                "Error":    err,
            }).Error("Couldnt prepare insert statement for users table")
        }
        insertUser.Exec(email)
        defer db.Close()
        return
    } // user account created

    logs.WithFields(logs.Fields{
        "Service":  "User Service",
        "package":  "register",
        "function": "UserRegister",
        "uuid":     requestID,
        "email":    email,
    }).Error("User has an account for this email")


}

В моем тестовом модуле я использовал следующее.

func TestUserRegister(t *testing.T) {
    rec := httptest.NewRecorder()
    req, _ := http.NewRequest("POST", "http://localhost:7071/register?email=sachit45345h@gmail.com&uid=sjfkjsdkf9w89w83490w", nil)

    UserRegister(rec, req)

    expected := "User has an account for this email"

    res := rec.Result()
    content, err := ioutil.ReadAll(res.Body)

    if err != nil {
        t.Error("Couldnt read body", err)
    }

    val, err := strconv.Atoi(string(bytes.TrimSpace(content)))

    if err != nil {
        log.Println("Error parsing response", err)
    }
    if string(val) != expected { 
        t.Errorf("Expected %s, got %s", expected, string(content))
    }

}

Результат: Ошибка анализа ответа strconv.Atoi: синтаксический анализ "": неверный синтаксис

Почему ответ не может быть преобразован?

Проверенные темы:

Почему этот Golang код для преобразования строки в целое число завершился неудачей.

Редактировать: после @ chmike ответ.

Это часть микросервиса. Все ответы пишутся на API-Gateway. Использование функции.

Но здесь я просто хочу выполнить модульное тестирование и проверить, работает ли мой UserRegister должным образом.

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Функция UserRegister никогда не записывает в res и не устанавливает статус. В результате вы получите пустую строку из res в TestUserRegister. content - пустая строка, и преобразование пустой строки в целое число с Atoi завершается неудачно, поскольку нет целого числа для преобразования.

Я могу только объяснить, что происходит. Я не могу сказать вам, что нужно сделать, чтобы решить проблему, потому что вы не объясните, что вы хотите сделать или получить в вопросе.

2 голосов
/ 09 января 2020

http-ответ, который вы читаете, не является ответом на ваш запрос. Вы создаете ответ и ожидаете, что в нем что-то есть. он не будет. В итоге вы пытаетесь создать целое число из пустой строки.

Посмотрите на некоторые примеры, чтобы узнать, откуда взялся реальный ответ. https://golang.org/pkg/net/http

...