カスタム パスを使用した 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 サイトの他の関連記事を参照してください。