英文:
Martini templates and tests
问题
我正在尝试将我的应用程序文件与测试文件分开。大致结构如下:
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
时,这一切都运行得很好。然而,当我尝试从spec/main_test.go
文件中使用CreateApplication()
函数时,它现在在spec/views
中查找视图,因为那是运行文件夹。
我尝试使用runtime.Caller()
来获取绝对路径,但这在编译二进制文件时会完全搞乱。
我想知道如何使这个工作?我希望CreateApplication()
在被调用的任何位置都能正常工作。
英文:
I'm trying to split my application files from my testing files. It looks something like this:
main.go
views/
layouts/
layout.html
spec/
main_test.go
main.go
creates a Martini app and tells Martini.render
where to look for the views:
func CreateApplication() {
m := martini.Classic()
m.Use(render.Renderer(render.Options{
Directory: "views",
Layout: "layouts/layout",
Extensions: []string{".html"},
}))
}
That all works really well when I'm using go run
from the root folder. However, when I try to use the CreateApplication()
function from the spec/main_test.go
file, it's now looking for the views in spec/views
because that's the run folder.
I went down the route of trying to use runtime.Caller()
to get the absolute path, but that totally messes up when compilling the a binary.
I guess my question is how I can make this work? I want that CreateApplication()
to work the same no matter where it was called from.
答案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 <- 这是符号链接
现在,当从spec/
运行你的测试时,可以找到views目录。希望对你有帮助,如果我的方法有什么问题,我很愿意知道!
英文:
I often run into this problem. What I do in such cases, is to create a symlink from the child directory to the folder in the root directory which holds the templates. Up until now I haven't had any problems using this appraoch, but when an app goes to production I delete those symlinks. I actually have a script that creates the symlinks before I start testing, and then deletes them after I'm done.
In your case, it would look like this (I'm on Ubuntu or 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
Now, when running your tests from spec/
the views directoy is found. I hope it helps you, and if my approach is somehow flawed, I'm eager to know!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论