Go - макет http.ответа с файлом - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь протестировать функцию Go, которая выполняет вызов внешней службы. Вот функция:

func (gs *EuGameService) retrieveGames(client model.HTTPClient) (model.EuGamesResponse, error) {
   req, err := http.NewRequest(http.MethodGet, gs.getGamesEndpoint, nil)
   if err != nil {
      log.Fatal("Error while creating request ", err)
      return nil, err
   }

   resp, err := client.Do(req)
   if err != nil {
       log.Fatal("Error while retrieving EU games", err)
       return nil, err
   }

   var euGames model.EuGamesResponse
   decoder := json.NewDecoder(resp.Body)
   decoder.Decode(&euGames)

   return euGames, nil
}

для правильной проверки, я пытаюсь внедрить фиктивный клиент.

type HTTPClient interface {
    Do(req *http.Request) (*http.Response, error)
}

type mockClient struct{}

func (mc *mockClient) Do(req *http.Request) (*http.Response, error) {
    mock, _ := os.Open("../stubs/eugames.json")
    defer mock.Close()

    r := ioutil.NopCloser(bufio.NewReader(mock))

    return &http.Response{
        Status:     string(http.StatusOK),
        StatusCode: http.StatusOK,
        Body:       r,
    }, nil
}

файл eugames.json содержит пару игр. Но почему-то тело всегда пусто! Что мне здесь не хватает? Я пытался использовать константу с содержимым файла, и это работает, игры декодируются правильно. Итак, я предполагаю, что есть проблема с моим использованием файла.

...