Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich für Komponententests auf Pfadvariablen in Chi-Routen zu?

Wie greife ich für Komponententests auf Pfadvariablen in Chi-Routen zu?

DDD
DDDOriginal
2024-10-27 07:33:29888Durchsuche

How to Access Path Variables in Chi Routes for Unit Tests?

Chi-Routen mit kontextabhängigen Pfadvariablen testen

Beim Testen von Chi-Routen, die auf Pfadvariablen basieren, ist es wichtig, den Zugriff auf diese Variablen in Tests nachzuahmen. Anfänglich kann es zu einem Fehler „Nicht verarbeitbare Entität“ kommen, da die Pfadvariable für den Kontext, auf den im Test zugegriffen wird, nicht verfügbar ist.

Kontextualisierung der Tests

Um dieses Problem zu beheben, fügen Sie manuell hinzu Pfadparameter zum Anforderungskontext hinzufügen, bevor der zu testende Handler ausgeführt wird. Hier ist ein Beispiel:

<code class="go">package main

import (
    "context"
    "fmt"
    "net/http"
    "net/http/httptest"
    "testing"

    "github.com/go-chi/chi"
)

type ctxKey struct {
    name string
}

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) {
            // Manually add the path variable to the request context
            rctx := chi.NewRouteContext()
            rctx.URLParams.Add("articleID", test.req.URL.Path[len("/articles/"):])
            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>

Diese Änderung ermöglicht es dem Test, über den Kontext auf die Pfadvariable zuzugreifen, wodurch der Fehler „Unprocessable Entity“ behoben wird.

Das obige ist der detaillierte Inhalt vonWie greife ich für Komponententests auf Pfadvariablen in Chi-Routen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn