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)
}