Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyelesaikan Ralat \'tiada fail atau direktori sedemikian\' Apabila Unit Menguji Templat Enjin Apl dengan Laluan Tersuai?
Menguji Templat Enjin Apl dengan Laluan Tersuai
Apabila menggunakan pakej templat dengan Go on App Engine, anda mungkin menghadapi masalah dengan resolusi fail semasa ujian unit. Ujian unit gagal dengan ralat "open templates/index.html: no such file or directory," yang menunjukkan bahawa pelayan tidak dapat mengesan fail template.
Penyelesaian kepada isu ini terletak pada pemahaman perbezaan antara app root (di mana app.yaml berada) dan direktori semasa semasa menjalankan ujian unit. Ujian unit biasanya dijalankan dalam folder yang mengandungi fail *_test.go, yang bukan akar apl. Laluan fail relatif yang berfungsi dengan betul semasa pelaksanaan apl biasa tidak akan diselesaikan dengan betul semasa menjalankan ujian.
Untuk menyelesaikan isu ini, anda boleh sama ada:
1. Tukar Direktori Kerja kepada Akar Apl:
Gunakan os.Chdir() untuk menavigasi ke direktori akar apl dalam fail ujian anda, yang biasanya naik 2 peringkat daripada lokasi fail ujian. Contohnya:
func init() { if err := os.Chdir("../.."); err != nil { panic(err) } }
Perhatikan bahawa ini mesti dilakukan dalam fungsi init() atau dipanggil secara eksplisit dalam kaedah ujian.
2. Kod Refactor:
Daripada menggunakan laluan fail relatif, faktorkan semula kod untuk menghantar akar apl sebagai parameter atau pembolehubah. Ini membolehkan anda menentukan laluan asas untuk resolusi fail relatif semasa ujian unit secara bebas daripada direktori semasa.
// 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()) }
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'tiada fail atau direktori sedemikian\' Apabila Unit Menguji Templat Enjin Apl dengan Laluan Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!