首页 > 后端开发 > Golang > 如何解决 Go App Engine 单元测试中的'恐慌:打开 templates/index.html:没有这样的文件或目录”错误?

如何解决 Go App Engine 单元测试中的'恐慌:打开 templates/index.html:没有这样的文件或目录”错误?

Susan Sarandon
发布: 2024-12-04 07:24:15
原创
517 人浏览过

How to Solve

如何使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板