2014-11-09 49 views
2

我試圖從我的測試文件中分割我的應用程序文件。它看起來是這樣的:馬丁尼模板和測試

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

main.go創建一個馬提尼應用程序,並告訴Martini.render到哪裏尋找的看法:

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

這所有的作品真的很好,當我使用go run從根文件夾。但是,當我嘗試使用spec/main_test.go文件中的CreateApplication()函數時,它現在正在查找spec/views中的視圖,因爲這是運行文件夾。

我沿着嘗試使用runtime.Caller()獲取絕對路徑的路線,但是在編譯二進制文件時完全混亂了。

我想我的問題是我如何使這項工作?我希望CreateApplication()的工作方式不管從何處調用。

+0

使用絕對路徑而不是相對路徑? – 2014-11-09 04:16:10

+0

編輯說「絕對」而不是「相對」。如果我確實可以獲得絕對路徑並且工作正常,我很樂意看到代碼。我無法讓'os.Getwd()'和'filepath.Join'工作。 – Ronze 2014-11-09 04:31:12

+0

我結束了傳遞一個字符串與相對路徑的根。按照此處的進展:https://github.com/runemadsen/golang-rails-template。 – Ronze 2014-11-09 05:15:58

回答

1

我經常遇到這個問題。在這種情況下,我所做的是從子目錄到包含模板的根目錄中的文件夾創建一個符號鏈接。直到現在,我還沒有使用這個appraoch有任何問題,但是當一個應用程序進入生產時,我刪除了這些符號鏈接。實際上,我有一個腳本可以在開始測試之前創建符號鏈接,然後在完成後刪除它們。

在你的情況下,它應該是這樣的(我在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/運行測試時的意見directoy被發現。我希望它可以幫助你,如果我的方法有點不對勁,我很想知道!