Пройдите тестовый пример, указав 500 в качестве ответа - PullRequest
0 голосов
/ 26 сентября 2018
request, err := http.NewRequest("GET", path, nil)
response := httptest.NewRecorder()
r.ServeHTTP(response, request)
var raw map[string]map[string]string
_ = json.Unmarshal(response.Body.Bytes(), &raw)
details := raw["response"]

У меня есть TestFunction, в которой я использую этот код.Это код для тестирования REST API для запроса GET.

В моем первом тестовом примере я нажимаю на определенный обработчик, а во втором тестовом случае я бью некоторый случайный обработчик, чтобы сбить этот случай.

Код передается, но каждый развторой тестовый пример дает 500 в качестве ответа.

Ниже приведен код моего тестового примера.

func TestGetProviders(t *testing.T) {
type args struct {
    path    string
    handler gin.HandlerFunc
}
tests := []struct {
    name string
    args args
    want bool
}{
    {
        "First",
        args{
            "/api/v1/providers",
            GetProviders,
        },
        true,
    },
    {
        "Second",
        args{
            "/demo",
            TheFunc,
        },
        false,
    },
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        value := copyCodeGet(tt.args.path, tt.args.handler)
        if len(value["response"]) > 0 {
            statusCode, _ := strconv.Atoi(value["response"]["code"])
            if val := statusCode == config.SuccessCode && value["response"]["message"] == config.SuccessMsg; val != tt.want {
                t.Errorf("Error is:%v && Status code should be %v, was %d.", value, http.StatusOK, statusCode)
            }
        }
    })
}

}

1 Ответ

0 голосов
/ 26 сентября 2018

Наконец, после некоторого обсуждения с

mkopriva

Я смог решить проблему.

Я использовал Defer c.Request.Body.Close () в GetErrResponseList внутри

func TheFunc(c *gin.Context) { 

GetErrResponseList(c, config.FailureMsg, nil, nil) 

}

, подобного этому

func GetErrResponseList(c *gin.Context, msg string, data, count interface{}) { 
defer c.Request.Body.Close() 
response := ResponseControllerList{400, 0, msg, data, count} 
c.JSON(200, gin.H{ 
config.Response: response, 
}) 
}

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

...