4 回答

TA貢獻1810條經(jīng)驗 獲得超4個贊
有一個類似的問題,雖然我直接對處理程序進行單元測試。httptest.NewRequest基本上,當使用強制您手動添加時,url 參數(shù)似乎不會自動添加到請求上下文中。
以下內容對我有用。
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/{key}", nil)
rctx := chi.NewRouteContext()
rctx.URLParams.Add("key", "value")
r = r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, rctx))
handler := func(w http.ResponseWriter, r *http.Request) {
? ? value := chi.URLParam(r, "key")
}
handler(w, r)
全部歸功于soedar?=)

TA貢獻1831條經(jīng)驗 獲得超10個贊
現(xiàn)在可能遲到了 :) 但也許其他人會發(fā)現(xiàn)它有用。
我遇到了同樣的問題,并希望將我的測試結構化為一個片段,所以我最終創(chuàng)建了一個“幫助程序”函數(shù),以便向請求添加所需的 chi 上下文:
func AddChiURLParams(r *http.Request, params map[string]string) *http.Request {
ctx := chi.NewRouteContext()
for k, v := range params {
ctx.URLParams.Add(k, v)
}
return r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, ctx))
}
同樣,正如@Ullauri 所提到的,解決方案的所有功勞都歸功于soedar。
但是有了這個函數(shù),你就可以像這樣在切片中很好地使用它:
{
name: "OK_100",
rec: httptest.NewRecorder(),
req: AddChiURLParams(httptest.NewRequest("GET", "/articles/100", nil), map[string]string{
"id": "100",
}),
expectedBody: `article ID:100`,
},
希望這可以幫助!:)

TA貢獻2037條經(jīng)驗 獲得超6個贊
在您指導定義 path 之后main
的用法,但在您的測試中您只是直接使用。ArticleCtx
/articles
ArticleCtx
您的測試請求不應包含/articles
,例如:
httptest.NewRequest("GET", "/1", nil)
- 4 回答
- 0 關注
- 228 瀏覽
添加回答
舉報