Как использовать go-vcr с github.com/satori/go.uuid для возврата значений Nil для uuid - PullRequest
1 голос
/ 22 апреля 2019

Когда я пытаюсь использовать go-vcr со структурами, содержащими uuid.UUID от github.com/satori/go.uuid, я не получаю никаких значений. Тестирование с другими структурами без типов uuid.UUID работает как положено.

Редактировать: go-vcr - это модуль go для записи HTTP-взаимодействий для воспроизведения: https://github.com/dnaeon/go-vcr

Тестирование с помощью Ginkgo и Gomega (для краткости пропущен тестовый код)

Go версия: go версия go1.12 darwin / amd64

type Test2 struct {
    ID          uuid.UUID `json:"id"`
    Name        string    `json:"name"`
    Description string    `json:"description"`
}
func (s *UserService) Test2() *Test2 {
    url := fmt.Sprintf("%v:%v/test", s.ServiceHost, s.ServicePort)
    var client = &http.Client{Timeout: 10 * time.Second}
    req, err := http.NewRequest("GET", url, nil)
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", s.ServiceToken))
    resp, err := client.Do(req)
    if err != nil {
        return nil
    }
    defer resp.Body.Close()

    var t Test2
    json.NewDecoder(resp.Body).Decode(&t)
    return &t
}

Крепеж:

---
version: 1
interactions:
- request:
    body: ""
    form: {}
    headers:
      Authorization:
      - Bearer 123abc
      Content-Type:
      - application/json
    url: http://localhost:8080/test2
    method: GET
  response:
    body: |
      {"id":"5600966e-4ad6-4f79-8e01-8db13ba5c212","name":"Foo","description":"Bar"}
    headers:
      Content-Length:
      - "79"
      Content-Type:
      - application/json
      Date:
      - Fri, 19 Apr 2019 18:49:03 GMT
    status: 200 OK
    code: 200
    duration: ""

Тестовый код:

    us := UserService{
            ServiceHost:  "http://localhost",
            ServicePort:  8080,
            ServiceToken: "123abc",
    }
    url = fmt.Sprintf("%v:%v/test", us.ServiceHost, us.ServicePort)
    req, err = http.NewRequest("GET", url, nil)
    Expect(err).To(BeNil())
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", us.ServiceToken))
    resp, err = client.Do(req)
    Expect(err).To(BeNil())
    defer resp.Body.Close()
    t := us.Test()
    Expect(t.Description).To(Equal("Bar"))

    r, err = recorder.New("fixtures/test2")
    Expect(err).To(BeNil())
    defer r.Stop()

    client = &http.Client{
       Transport: r,
    }

    url = fmt.Sprintf("%v:%v/test2", us.ServiceHost, us.ServicePort)        
    req, err = http.NewRequest("GET", url, nil)
    Expect(err).To(BeNil())
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", us.ServiceToken))
    resp, err = client.Do(req)
    Expect(err).To(BeNil())
    defer resp.Body.Close()
    t2 := us.Test2()

       iDString := "5600966e-4ad6-4f79-8e01-8db13ba5c212"
    id, err := uuid.FromString(iDString)
    Expect(err).To(BeNil())
    Expect(t2.ID).To(Equal(id))
Fails with

   �[91mExpected
          <uuid.UUID>: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      to equal
          <uuid.UUID>: [86, 0, 150, 110, 74, 214, 79, 121, 142, 1, 141, 177, 59, 165, 194,

Редактировать: Все еще интересует, почему это не работает, но в итоге ушел с другой библиотекой воспроизведения HTTP Record, у которой нет этой проблемы https://github.com/ad2games/vcr-go

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