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 サイトの他の関連記事を参照してください。