gpt4 book ai didi

unit-testing - 如何对Gin Gonic中的cookie进行单元测试提取

转载 作者:行者123 更新时间:2023-12-01 20:27:12 25 4
gpt4 key购买 nike

我正在使用gin gonic。我有一个从cookie中提取 token 的函数,该函数实际上是有效的。我在路由处理程序中使用此功能,并且想测试处理程序功能,但我不知道如何。

函数:

// Extracts token from a cookie
func tokenFromCookie(c *gin.Context, name string) (string, error) {
token, err := c.Cookie(name)
if err != nil {
return "", err
}

return token, nil
}

路线:
func RefreshTokenHandler(accessTokenKey string, refreshTokenKey string) gin.HandlerFunc {
fn := func(c *gin.Context) {
token, err := tokenFromCookie(c, "refresh_token")
if err != nil {
_ = c.Error(err).SetMeta(noCookie)
return
}
c.JSON(http.StatusOK, gin.H{
"token": token,
})
})

路线定义:
func CreateRoutes(r *gin.Engine) *gin.Engine {

r.Use(errorHandler)

// Auth
auth := r.Group("/auth")
{
auth.GET("/refresh-token", RefreshTokenHandler(accessTokenSignatureKey, refreshTokenSignatureKey))
}

return r
}

单元测试:
func TestRefreshTokenHandler(t *testing.T) {
req, _ := http.NewRequest("GET", "/auth/refresh-token", nil)
req.AddCookie(&http.Cookie{
Name: "refresh_token",
Value: "token",
MaxAge: 604800,
Expires: time.Now().Add(time.Hour * 24 * 7),
Path: "/",
Domain: "127.0.0.1",
HttpOnly: true,
SameSite: http.SameSiteNoneMode,
Secure: secure
}
)

w := httptest.NewRecorder()
router.ServeHTTP(w, req)
got := w.Code
if gotCode != 200 {
t.Errorf("GET /auth/refresh-token; got %d, want 200", got)
}
}

tokenFromCookie()函数会引发错误:
http: named cookie not present

这是我在 gin gonic repo中发现的类似的单元测试:
func TestContextGetCookie(t *testing.T) {
c, _ := CreateTestContext(httptest.NewRecorder())
c.Request, _ = http.NewRequest("GET", "/get", nil)
c.Request.Header.Set("Cookie", "user=gin")
cookie, _ := c.Cookie("user")
assert.Equal(t, "gin", cookie)

_, err := c.Cookie("nokey")
assert.Error(t, err)
}

但是我不明白为什么我的代码不起作用以及如何重写它。

最佳答案

要查看列表cookie,您可以尝试以下操作:

fmt.Println(c.Request.Cookies())

我不明白创建新函数tokenFromCookie的意义。
func RefreshTokenHandler(accessTokenKey string, refreshTokenKey string) gin.HandlerFunc {
fn := func(c *gin.Context) {
//token, err := tokenFromCookie(c, "refresh_token")
token, err := c.Cookie("refresh_token")
if err != nil {
_ = c.Error(err).SetMeta(noCookie)
return
}
c.JSON(http.StatusOK, gin.H{
"token": token,
})
})

关于unit-testing - 如何对Gin Gonic中的cookie进行单元测试提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59764354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com