Heim >Backend-Entwicklung >Golang >Wie behebe ich den Fehler „Keine solche Datei oder kein solches Verzeichnis' beim Unit-Testen von App Engine-Vorlagen mit benutzerdefinierten Pfaden?

Wie behebe ich den Fehler „Keine solche Datei oder kein solches Verzeichnis' beim Unit-Testen von App Engine-Vorlagen mit benutzerdefinierten Pfaden?

Susan Sarandon
Susan SarandonOriginal
2024-12-03 19:43:09492Durchsuche

How to Resolve

Testen von App Engine-Vorlagen mit benutzerdefinierten Pfaden

Bei der Verwendung des Vorlagenpakets mit Go on App Engine kann es zu Problemen mit der Dateiauflösung kommen während des Unit-Tests. Der Komponententest schlägt mit der Fehlermeldung „open templates/index.html: no such file or Directory“ fehl, was darauf hinweist, dass der Server die Vorlagendatei nicht finden kann.

Die Lösung für dieses Problem liegt darin, den Unterschied zwischen den zu verstehen App-Stammverzeichnis (wo sich app.yaml befindet) und das aktuelle Verzeichnis beim Ausführen von Komponententests. Unit-Tests werden normalerweise in dem Ordner ausgeführt, der die Datei *_test.go enthält, bei dem es sich nicht um das App-Stammverzeichnis handelt. Relative Dateipfade, die während der normalen App-Ausführung korrekt funktionieren, werden beim Ausführen von Tests nicht korrekt aufgelöst.

Um dieses Problem zu beheben, können Sie entweder:

1. Ändern Sie das Arbeitsverzeichnis zum App-Stammverzeichnis:

Verwenden Sie os.Chdir(), um zum App-Stammverzeichnis in Ihrer Testdatei zu navigieren, das normalerweise zwei Ebenen über dem Speicherort der Testdatei liegt. Zum Beispiel:

func init() {
    if err := os.Chdir("../.."); err != nil {
        panic(err)
    }
}

Beachten Sie, dass dies in der Funktion init() erfolgen oder explizit in der Testmethode aufgerufen werden muss.

2. Umgestaltungscode:

Anstatt relative Dateipfade zu verwenden, umgestalten Sie den Code, um den App-Stamm als Parameter oder Variable zu übergeben. Dadurch können Sie den Basispfad für die relative Dateiauflösung während Unit-Tests unabhängig vom aktuellen Verzeichnis angeben.

// Package scope variable for passing the app root
var appRoot string

func pageIndex(w http.ResponseWriter, r *http.Request) {
    tpls := append([]string{"templates/index.html"}, templates...)
    tpl := template.Must(template.ParseFiles(append([]string{appRoot}, tpls...)...))
    // ...
}

// Function to initialize the app root before running tests
func TestMain(m *testing.M) {
    // Set appRoot to the absolute path of the app root
    appRoot = "../.."
    // ...
    os.Exit(m.Run())
}

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Keine solche Datei oder kein solches Verzeichnis' beim Unit-Testen von App Engine-Vorlagen mit benutzerdefinierten Pfaden?. 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