Maison  >  Article  >  développement back-end  >  Comment tester les itinéraires Go-Chi avec des variables de chemin à l'aide de httptest.NewRouteContext ?

Comment tester les itinéraires Go-Chi avec des variables de chemin à l'aide de httptest.NewRouteContext ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 11:48:02303parcourir

How to Test Go-Chi Routes with Path Variables Using httptest.NewRouteContext?

Test des itinéraires Chi avec des variables de chemin

Lors du test des itinéraires Go-Chi avec des variables de chemin, vous pouvez rencontrer des erreurs liées aux valeurs manquantes des variables de chemin . Cela peut se produire car les variables de chemin ne sont pas automatiquement ajoutées au contexte de requête lors de l'utilisation de httptest.NewRequest.

Pour résoudre ce problème, ajoutez manuellement les variables de chemin au contexte de requête à l'aide de la fonction httptest.NewRouteContext. Voici un exemple :

<code class="go">func TestGetArticleID(t *testing.T) {
    tests := []struct {
        name           string
        rec            *httptest.ResponseRecorder
        req            *http.Request
        expectedBody   string
        expectedHeader string
    }{
        {
            name:         "OK_1",
            rec:          httptest.NewRecorder(),
            req:          httptest.NewRequest("GET", "/articles/1", nil),
            expectedBody: `article ID:1`,
        },
        {
            name:         "OK_100",
            rec:          httptest.NewRecorder(),
            req:          httptest.NewRequest("GET", "/articles/100", nil),
            expectedBody: `article ID:100`,
        },
        {
            name:         "BAD_REQUEST",
            rec:          httptest.NewRecorder(),
            req:          httptest.NewRequest("PUT", "/articles/bad", nil),
            expectedBody: fmt.Sprintf("%s\n", http.StatusText(http.StatusBadRequest)),
        },
    }

    for _, test := range tests {
        t.Run(test.name, func(t *testing.T) {
            // Add path variables to the request context
            rctx := chi.NewRouteContext()
            rctx.URLParams.Add("articleID", "1")
            test.req = test.req.WithContext(context.WithValue(test.req.Context(), chi.RouteCtxKey, rctx))

            ArticleCtx(http.HandlerFunc(GetArticleID)).ServeHTTP(test.rec, test.req)

            if test.expectedBody != test.rec.Body.String() {
                t.Errorf("Got: \t\t%s\n\tExpected: \t%s\n", test.rec.Body.String(), test.expectedBody)
            }
        })
    }
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn