2

アプリケーション ファイルをテスト ファイルから分割しようとしています。次のようになります。

main.go
views/
  layouts/
    layout.html
spec/
  main_test.go

main.goMartini アプリを作成Martini.renderし、ビューを探す場所を指示します。

func CreateApplication() {
  m := martini.Classic()
  m.Use(render.Renderer(render.Options{
    Directory: "views",
    Layout: "layouts/layout",
    Extensions: []string{".html"},
  }))
}

go runルート フォルダーから使用している場合、すべてが非常にうまく機能します。ただし、ファイルCreateApplication()から関数を使用しようとすると、それが実行フォルダーであるため、ビューが検索されます。spec/main_test.gospec/views

絶対パスを取得するために使用しようとするルートをruntime.Caller()たどりましたが、バイナリをコンパイルするときに完全に台無しになります。

私の質問は、どうすればこれを機能させることができるのでしょうか。CreateApplication()どこから呼び出されても同じように動作するようにしたい。

4

1 に答える 1

1

私はしばしばこの問題に遭遇します。このような場合に私が行うことは、子ディレクトリから、テンプレートを保持するルート ディレクトリ内のフォルダーへのシンボリック リンクを作成することです。これまで、このアプローチを使用して問題が発生したことはありませんが、アプリが本番環境に移行すると、それらのシンボリック リンクを削除します。実際には、テストを開始する前にシンボリック リンクを作成し、終了後にシンボリック リンクを削除するスクリプトがあります。

あなたの場合、次のようになります(私はUbuntuまたはCygwinを使用しています):

main.go
views/
  layouts/
    layout.html
spec/
  main_test.go

$ cd spec
$ ln -s ../views views

main.go
views/
  layouts/
    layout.html
spec/
  main_test.go
  views <- this is the symlink

spec/これで、ビュー ディレクトリからテストを実行すると、見つかったディレクトリが見つかりました。お役に立てば幸いです。私のアプローチに何らかの欠陥がある場合は、ぜひお知らせください。

于 2014-11-14T09:06:06.703 に答える