Go 単体テストで App Engine のテンプレート パスを指定する方法
App Engine で Go の組み込みテンプレート パッケージを使用する場合、単体テスト中にテンプレート ファイルへのパスを指定するのは困難な場合があります。パスはローカル開発中に機能しますが、単体テストを実行すると、多くの場合、「パニック: [テンプレート パス] を開きます: そのようなファイルまたはディレクトリはありません。」というエラーが発生します。
この問題は、単体テスト中の作業ディレクトリがそれはアプリを実行しているときです。開発モードでは、現在のディレクトリがアプリのルートとなり、相対パスを正しく解決できます。ただし、単体テスト中に、現在のディレクトリがテスト ファイルを含むフォルダーに切り替わり、相対パスが失敗します。
この問題に対処するには、主に 2 つのオプションがあります:
1.作業ディレクトリをアプリのルートに変更する
相対パスを使用するコードを実行する前に、os.Chdir() を使用して作業ディレクトリをアプリのルート フォルダーに設定します。例:
if err := os.Chdir("../.."); err != nil { panic(err) }
また、これをテスト ファイル内の init() 関数で実行して、テスト メソッドの前に確実に実行することもできます。
2.コードのリファクタリング
相対パスを使用するコードの場合は、相対パスのベース パスのパラメーターを受け入れるようにコードを変更します。このベース パスは単体テストの実行時に別の方法で設定できるため、相対パスを正しく解決できます。例:
base := "" // Set to "" when running normally and to app root when testing tplPaths := append([]string{"templates/index.html"}, templates...)
これらの手法の 1 つを組み込むことで、単体テスト中にテンプレート パスが正しく解決されるようになり、コードを効果的にテストできるようになります。
以上がApp Engine 単体テストで Go テンプレートを使用するときに発生する「そのようなファイルまたはディレクトリはありません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。