2

API の 1 つでいくつかの応答を確認するためのテストを書いていますが、resty モック クライアントが元の関数に送信されていません。readme の例を使用して resty のモック クライアントを作成しましたが、resty のモックに関する情報は非常に不完全です。

私の関数の応答は常に空白を返すので、何が間違っているのかわかりません。どんなヒントでも私を大いに助けます。

func TestService_getAccessToken(t *testing.T) {
tests := []struct {
    name           string
    response       string
    responseStatus int
    want           *model.Token
}{
    {
        "success",
        `{
            "access_token": "aQWsadw21sdax",
            "token_type": "Bearer",
            "expires_in": 300
        }`,
        http.StatusOK,
        &model.Token{
            AccessToken: "aQWsadw21sdax",
        },
    },
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        cfg, err := config.Load("./../../config/testdata/config.yml")
        client := resty.New()
        httpmock.ActivateNonDefault(client.GetClient())
        responder := httpmock.NewStringResponder(200, tt.response)
        s := &Service{
            Client: client,
            cfg:    cfg,
        }
        httpmock.RegisterResponder("POST", s.cfg.Services.Lego.AuthHost, responder)
        if err != nil {
            t.Errorf("Service.getAccessToken() = %v", err)
        }
        if got := s.getAccessToken(); !reflect.DeepEqual(got, tt.want) {
            t.Errorf("Service.getAccessToken() = %v, want %v", got, tt.want)
        }
    })
}

}

ここに私の機能情報があります

type Service struct {
    Client *resty.Client
    cfg    *config.Configuration
}

func New(cfg *config.Configuration) *Service {
    c := resty.New().
        SetTimeout(cfg.Services.Lego.Timeout)

    return &Service{Client: c, cfg: cfg}
}

func (s *Service) getAccessToken() *model.Token {
    resp, _ := s.Client.SetHostURL(s.cfg.Services.Lego.AuthHost).R().
        SetBasicAuth(s.cfg.Services.Lego.Username, s.cfg.Services.Lego.Password).
        SetFormData(map[string]string{
            "grant_type": "client_credentials",
        }).
        SetResult(model.Token{}).
        Post("/v2/access_token")

    return resp.Result().(*model.Token)
}
4

0 に答える 0