Meine aktuelle Verzeichnisstruktur sieht wie folgt aus:Go: Die Angabe Vorlage Dateinamen für template.ParseFiles
App
- Template
- foo.go
- foo.tmpl
- Model
- bar.go
- Another
- Directory
- baz.go
Die Datei foo.go
ParseFiles
verwendet in der Vorlagendatei während init
zu lesen.
import "text/template"
var qTemplate *template.Template
func init() {
qTemplate = template.Must(template.New("temp").ParseFiles("foo.tmpl"))
}
...
Unit-Tests für foo.go
Arbeit wie erwartet. Jedoch versuche ich jetzt Unit-Tests für bar.go
und baz.go
zu starten, die beide foo.go
importieren und ich bekomme eine Panik beim Versuch, foo.tmpl
zu öffnen.
/App/Model$ go test
panic: open foo.tmpl: no such file or directory
/App/Another/Directory$ go test
panic: open foo.tmpl: no such file or directory
Ich habe versucht, die Vorlagennamen als relatives Verzeichnis Angabe (“./foo.tmpl "), ein Full-Verzeichnis (" ~/go/src/github.com/App/Template/foo. tmpl "), ein relatives App-Verzeichnis (" /App/Template/foo.tmpl ") und andere, aber nichts scheint für beide Fälle zu funktionieren. Die Komponententests schlagen entweder für bar.go
oder baz.go
(oder beides) fehl.
Wo sollte meine Vorlagendatei platziert werden und wie soll ich ParseFiles
aufrufen, so dass es immer die Vorlagendatei finden kann, unabhängig davon, welches Verzeichnis ich go test
aufrufen?
Können Sie ein klares Beispiel nach, was Sie zu tun versuchen? Ich habe 'ParseFiles (" ../ Template/foo.tmpl ") von' Model' ausprobiert und es funktioniert gut. – creack
Aber wenn ich versuche, go go test in einem tieferen Verzeichnis auszuführen, funktioniert es nicht mehr. Von dem, was ich herausfinden kann, setzt 'go test' immer das aktuelle Arbeitsverzeichnis und dann' ParseFiles' verwendet dieses als das Basisverzeichnis, um Vorlagen zu finden, anstatt relativ zu der Datei zu sein, die 'ParseFiles' aufruft. Das ist sehr fragil, also muss ich etwas falsch machen. – Bill
Ich habe meine Frage aktualisiert, um das Problem zu zeigen, auf das ich gestoßen bin. – Bill