So geben Sie Vorlagenpfade für App Engine mit Go-Unit-Tests an
Bei Verwendung von App Engine mit dem integrierten Vorlagenpaket von Go werden Unit-Tests durchgeführt Möglicherweise treten Probleme beim Auffinden von Vorlagendateien auf. Dies liegt daran, dass der Server während der lokalen Entwicklung die Vorlagendateien relativ zum App-Stammverzeichnis findet, während Komponententests in einem anderen Verzeichnis ausgeführt werden.
Das Problem
Das Der Unit-Test gerät mit der folgenden Meldung in Panik: „Panic: open templates/index.html: no such file or Directory.“ Dies weist darauf hin, dass der Server die Vorlagendatei index.html nicht finden kann.
Option 1: Arbeitsverzeichnis ändern
Eine Möglichkeit besteht darin, das Arbeitsverzeichnis in das App-Stammverzeichnis zu ändern bevor Sie den Code aufrufen, der relative Pfade zu den Vorlagen verwendet. Dies kann mit os.Chdir() erreicht werden.
import "os" func init() { if err := os.Chdir("../.."); err != nil { panic(err) } }
Option 2: Code umgestalten
Eine weitere Option besteht darin, den Code umzugestalten, der relative Pfade zum Akzeptieren verwendet ein Basispfad. Dieser Basispfad kann während Tests auf das App-Stammverzeichnis festgelegt werden, damit die relativen Pfade korrekt funktionieren.
func pageIndex(w http.ResponseWriter, r *http.Request, basePath string) { tpls := append([]string{basePath + "/templates/index.html"}, templates...) tpl := template.Must(template.ParseFiles(tpls...)) // ... }
Im Unit-Test kann der Basispfad auf das App-Stammverzeichnis festgelegt werden, um sicherzustellen, dass die Vorlage Dateien können gefunden werden.
func TestPageIndex(t *testing.T) { inst, _ := aetest.NewInstance(nil) //ignoring the errors for brevity defer inst.Close() req, _ := inst.NewRequest("GET", "/", nil) resp := httptest.NewRecorder() pageIndex(resp, req, "../..") // Set base path to app root }
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Panik: open templates/index.html: keine solche Datei oder kein solches Verzeichnis' in Go App Engine-Komponententests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!