2

我正在编写一些测试来检查我的一个 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)
}
4

0 回答 0