我试图从我的测试文件中分割我的应用程序文件。它看起来像这样:
main.go
views/
layouts/
layout.html
spec/
main_test.go
main.go
创建一个Martini应用并告诉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.go
函数时,它现在正在查找spec/views
中的视图,因为它是运行文件夹。<\ n / p>
我沿着尝试使用runtime.Caller()
来获取绝对路径的路线,但在填写二进制文件时这完全是混乱。
我想我的问题是如何让这项工作成功?我希望CreateApplication()
无论在何处调用它都能正常工作。
答案 0 :(得分: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的视图。我希望它可以帮到你,如果我的方法有些不妥,我很想知道!