ホームページ >バックエンド開発 >Golang >カスタム パスを使用して App Engine テンプレートを単体テストするときに発生する「そのようなファイルまたはディレクトリはありません」エラーを解決する方法

カスタム パスを使用して App Engine テンプレートを単体テストするときに発生する「そのようなファイルまたはディレクトリはありません」エラーを解決する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 19:43:09475ブラウズ

How to Resolve

カスタム パスを使用した App Engine テンプレートのテスト

App Engine の Go でテンプレート パッケージを使用すると、ファイル解決の問題が発生する可能性があります単体テスト中。単体テストは、「open templates/index.html: no such file or directory」というエラーで失敗します。これは、サーバーがテンプレート ファイルを見つけられないことを示しています。

この問題の解決策は、単体テストを実行するときのアプリ ルート (app.yaml が存在する場所) と現在のディレクトリ。単体テストは通常​​、アプリ ルートではない *_test.go ファイルを含むフォルダーで実行されます。通常のアプリの実行時には正しく機能する相対ファイル パスは、テストの実行時には正しく解決されません。

この問題を解決するには、次のいずれかを実行できます。

1.作業ディレクトリをアプリ ルートに変更します:

os.Chdir() を使用して、テスト ファイル内のアプリ ルート ディレクトリに移動します。通常、このディレクトリはテスト ファイルの場所から 2 レベル上にあります。例:

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

これは init() 関数で実行するか、テスト メソッドで明示的に呼び出す必要があることに注意してください。

2.コードのリファクタリング:

相対ファイル パスを使用する代わりに、コードをリファクタリングしてアプリのルートをパラメータまたは変数として渡します。これにより、単体テスト中に現在のディレクトリとは独立して相対的なファイル解決のベース パスを指定できます。

// 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())
}

以上がカスタム パスを使用して App Engine テンプレートを単体テストするときに発生する「そのようなファイルまたはディレクトリはありません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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