首頁 >後端開發 >Golang >如何解決 Go App Engine 單元測試中的「恐慌:開啟 templates/index.html:沒有這樣的檔案或目錄」錯誤?

如何解決 Go App Engine 單元測試中的「恐慌:開啟 templates/index.html:沒有這樣的檔案或目錄」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-12-04 07:24:15524瀏覽

How to Solve

如何使用Go 單元測試為App Engine 指定模板路徑

使用App Engine 和Go 的內建模板包時,單元查找測試模板文件時可能會遇到問題。這是因為,在本機開發過程中,伺服器會尋找相對於應用程式根目錄的範本文件,而單元測試在不同的目錄中運行。

問題

The單元測試出現恐慌,並顯示以下訊息:「恐慌:開啟templates/index.html:沒有這樣的檔案或目錄。」這表明伺服器找不到index.html模板檔案。

選項1:更改工作目錄

一個選項是將工作目錄變更為應用程式根目錄在呼叫使用範本相對路徑的程式碼之前。這可以透過 os.Chdir() 來實現。

import "os"

func init() {
    if err := os.Chdir("../.."); err != nil {
        panic(err)
    }
}

選項 2:重構程式碼

另一個選項是重構使用相對路徑接受的程式碼基本路徑。測試時可以將此基本路徑設定為應用程式根目錄,從而使相對路徑能夠正常運作。

func pageIndex(w http.ResponseWriter, r *http.Request, basePath string) {
    tpls := append([]string{basePath + "/templates/index.html"}, templates...)
    tpl := template.Must(template.ParseFiles(tpls...))
    // ...
}

在單元測試中,可以將基本路徑設定為應用程式根目錄,確保範本可以找到檔案。

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
}

以上是如何解決 Go App Engine 單元測試中的「恐慌:開啟 templates/index.html:沒有這樣的檔案或目錄」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn