我正在编写一些测试来检查我的一个 API 上的一些响应,但是 resty 模拟客户端没有被发送到原始函数。我使用自述文件示例为 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)
}