首页 >后端开发 >Golang >使用自定义路径对 App Engine 模板进行单元测试时如何解决'没有这样的文件或目录”错误?

使用自定义路径对 App Engine 模板进行单元测试时如何解决'没有这样的文件或目录”错误?

Susan Sarandon
Susan Sarandon原创
2024-12-03 19:43:09475浏览

How to Resolve

使用自定义路径测试 App Engine 模板

在 App Engine 上使用模板包和 Go 时,您可能会遇到文件解析问题在单元测试期间。单元测试失败,错误“open templates/index.html: no such file or directory”,表明服务器无法定位模板文件。

解决这个问题的方法在于理解应用程序根目录(app.yaml 所在的位置)和运行单元测试时的当前目录。单元测试通常在包含 *_test.go 文件的文件夹中运行,该文件夹不是应用程序根目录。在正常应用执行期间正常工作的相对文件路径在运行测试时将无法正确解析。

要解决此问题,您可以:

1.将工作目录更改为应用程序根目录:

使用 os.Chdir() 导航到测试文件中的应用程序根目录,通常比测试文件位置高 2 级。例如:

func init() {
    if err := os.Chdir("../.."); err != nil {
        panic(err)
    }
}

请注意,这必须在 init() 函数中完成或在测试方法中显式调用。

2.重构代码:

重构代码以将应用程序根目录作为参数或变量传递,而不是使用相对文件路径。这允许您在单元测试期间独立于当前目录指定相对文件解析的基本路径。

// Package scope variable for passing the app root
var appRoot string

func pageIndex(w http.ResponseWriter, r *http.Request) {
    tpls := append([]string{"templates/index.html"}, templates...)
    tpl := template.Must(template.ParseFiles(append([]string{appRoot}, tpls...)...))
    // ...
}

// Function to initialize the app root before running tests
func TestMain(m *testing.M) {
    // Set appRoot to the absolute path of the app root
    appRoot = "../.."
    // ...
    os.Exit(m.Run())
}

以上是使用自定义路径对 App Engine 模板进行单元测试时如何解决'没有这样的文件或目录”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn