我正在尝试将我的应用程序文件从测试文件中分离出来。它看起来像这样:
main.go
views/
layouts/
layout.html
spec/
main_test.gomain.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中的视图,因为那是run文件夹。
我尝试使用runtime.Caller()来获取绝对路径,但在编译二进制文件时,这完全搞砸了。
我想我的问题是我如何才能做到这一点?我希望无论从哪里调用CreateApplication(),它都能以相同的方式工作。
发布于 2014-11-14 17:06:07
我经常遇到这个问题。在这种情况下,我要做的是创建一个从子目录到根目录中包含模板的文件夹的符号链接。到目前为止,我在使用这个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/运行您的测试时,可以找到视图目录。我希望它能帮助你,如果我的方法有什么缺陷,我很想知道!
https://stackoverflow.com/questions/26824917
复制相似问题