所以我有一个非常基本的配置,Viper从我的基目录中读取一个.env文件。如果没有.env文件,我将致命地杀死该进程。正常运行我的应用程序时,一切都很顺利。当我使用 运行测试时,测试框架似乎单步执行每个文件的目录,并且每次都调用我的config init()函数,因此指向错误的位置。go test -v ./..viper.AddConfigPath(".")
这是我的目录结构:
/
/restapi
items.go
items_test.go
/util
env.go
main.go
.env
env.go
package util
imports...
// global variables available via util package
var (
Port int
DbURI string
)
func init() {
viper.SetDefault(PORT, 8080)
viper.SetConfigFile(".env")
viper.AddConfigPath(".")
viper.AutomaticEnv()
fmt.Println("---------to see in test printout")
cwd, _ := os.Getwd()
fmt.Println(cwd)
fmt.Println("---------")
if err := viper.ReadInConfig(); err != nil {
log.Fatal("no environment file!")
}
Port = viper.GetInt("PORT")
DbURI = viper.GetString("DB_URI")
}
每个包基本上都依赖于我的util包,因此这个init函数会针对每个测试运行。有没有办法让 Viper 始终从基目录中提取 .env 文件,即使有测试正在运行?我尝试了几种不同的AddConfigPath()调用。有点新去。还是环境变量的这种结构设置不起作用,因为它每次都无法通过我的测试?
鸿蒙传说
湖上湖
相关分类