Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyelesaikan Ralat \'tiada fail atau direktori sedemikian\' Apabila Unit Menguji Templat Enjin Apl dengan Laluan Tersuai?

Bagaimana untuk Menyelesaikan Ralat \'tiada fail atau direktori sedemikian\' Apabila Unit Menguji Templat Enjin Apl dengan Laluan Tersuai?

Susan Sarandon
Susan Sarandonasal
2024-12-03 19:43:09422semak imbas

How to Resolve

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn