2014-11-09 4 views
2

테스트 파일에서 응용 프로그램 파일을 분할하려고합니다. 그것은이 같은 같습니다Martini 템플릿 및 테스트

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

main.go는 마티니 응용 프로그램을 만듭니다과 전망을 찾기 위해 Martini.render 말한다 : 나는 루트 폴더에서 go run을 사용하고 때 모두가 정말 잘 작동

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

을 . 그러나 spec/main_test.go 파일에서 CreateApplication() 함수를 사용하려고하면 실행 폴더 인 spec/views에있는 뷰를 찾고 있습니다.

나는 절대 경로를 얻기 위해 runtime.Caller()을 사용하려고 시도했지만, 바이너리를 컴파일 할 때 완전히 엉망진창이다.

제 질문은이 작업을 어떻게 수행 할 수 있을까요? 내가 어디서 전화했는지 상관없이 CreateApplication()이 똑같이 작동하기를 바랍니다.

+0

상대 경로 대신 절대 경로를 사용 하시겠습니까? –

+0

"relative"대신 "absolute"라고 수정되었습니다. 실제로 절대 경로를 얻을 수 있고 작동한다면 코드를보고 싶을 것입니다. 'os.Getwd()'와'filepath.Join'을 사용할 수 없습니다. – Ronze

+0

루트로 상대 경로가있는 문자열을 전달하는 결과가 발생했습니다. https://github.com/runemadsen/golang-rails-template에서 진행 상황을 따릅니다. – Ronze

답변

1

종종이 문제가 발생합니다. 그런 경우에, 자식 디렉토리에서 템플릿을 보유하고있는 루트 디렉토리에있는 폴더로의 심볼릭 링크를 만드는 것입니다. 지금까지이 appraoch를 사용하는 데 아무런 문제가 없었지만 앱이 제작에 들어가면 해당 symlink를 삭제합니다. 필자는 실제로 테스트를 시작하기 전에 심볼릭 링크를 생성 한 스크립트를 가지고 있으며, 완료 후에는 심볼릭 링크를 삭제합니다. 귀하의 경우에는

, 그것은 (나는 우분투 또는 Cygwin에서에있어)과 같을 것이다 : spec/에서 테스트를 실행할 때

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 

는 이제 뷰 directoy이 발견된다. 나는 그것이 당신을 도울 수 있기를 바란다. 만일 나의 접근법이 어떻게 든 결점이 있다면, 나는 알고 싶어한다!