ホームページ >バックエンド開発 >Golang >Go App Engine 単体テストの「パニック: テンプレートを開く/index.html: そのようなファイルまたはディレクトリはありません」エラーを解決する方法

Go App Engine 単体テストの「パニック: テンプレートを開く/index.html: そのようなファイルまたはディレクトリはありません」エラーを解決する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-04 07:24:15524ブラウズ

How to Solve

Go 単体テストで App Engine のテンプレート パスを指定する方法

Go の組み込みテンプレート パッケージで App Engine を使用する場合、単体テストテンプレート ファイルの検索で問題が発生する可能性があります。これは、ローカル開発中に、単体テストが別のディレクトリで実行される一方で、サーバーはアプリケーション ルートに関連するテンプレート ファイルを検索するためです。

問題

単体テストは次のメッセージでパニックになります: 「パニック: テンプレート/index.html を開きます: そのようなファイルまたはディレクトリはありません。」これは、サーバーがindex.html テンプレート ファイルを見つけられないことを示しています。

オプション 1: 作業ディレクトリの変更

1 つのオプションは、作業ディレクトリをアプリのルートに変更することです。テンプレートへの相対パスを使用するコードを呼び出す前に。これは、os.Chdir() で実現できます。

import "os"

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

オプション 2: コードをリファクタリング

もう 1 つのオプションは、相対パスを使用して受け入れるコードをリファクタリングすることです。基本パス。このベース パスはテスト中にアプリ ルートに設定でき、相対パスが正しく機能できるようになります。

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 単体テストの「パニック: テンプレートを開く/index.html: そのようなファイルまたはディレクトリはありません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。