如何使用 Go 单元测试为 App Engine 指定模板路径
当使用 App Engine 和 Go 的内置模板包时,单元测试查找模板文件时可能会遇到问题。这是因为,在本地开发过程中,服务器会查找相对于应用程序根目录的模板文件,而单元测试在不同的目录中运行。
问题
The单元测试出现恐慌,并显示以下消息:“恐慌:打开 templates/index.html:没有这样的文件或目录。”这表明服务器找不到index.html模板文件。
选项1:更改工作目录
一个选项是将工作目录更改为应用程序根目录在调用使用模板相对路径的代码之前。这可以通过 os.Chdir() 来实现。
import "os" func init() { if err := os.Chdir("../.."); err != nil { panic(err) } }
选项 2:重构代码
另一个选项是重构使用相对路径接受的代码基本路径。测试时可以将此基本路径设置为应用程序根目录,从而使相对路径能够正常运行。
func pageIndex(w http.ResponseWriter, r *http.Request, basePath string) { tpls := append([]string{basePath + "/templates/index.html"}, templates...) tpl := template.Must(template.ParseFiles(tpls...)) // ... }
在单元测试中,可以将基本路径设置为应用程序根目录,确保模板可以找到文件。
func TestPageIndex(t *testing.T) { inst, _ := aetest.NewInstance(nil) //ignoring the errors for brevity defer inst.Close() req, _ := inst.NewRequest("GET", "/", nil) resp := httptest.NewRecorder() pageIndex(resp, req, "../..") // Set base path to app root }
以上是如何解决 Go App Engine 单元测试中的'恐慌:打开 templates/index.html:没有这样的文件或目录”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!