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?
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!