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
Lepaskan: 2024-12-03 19:43:09
asal
489 orang telah melayarinya

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)
    }
}
Salin selepas log masuk

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())
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan