2 回答
TA贡献1995条经验 获得超2个赞
经过多次尝试,我开始知道 beego 会初始化其AppPath在beego/conf.go 中调用的变量,例如 -
AppPath, _ = filepath.Abs(filepath.Dir(os.Args[0]))
当你运行你的测试时,你运行它们 go test -v
但结果os.Args[0]是文本可执行文件,它将是/tmp/path/to/test而不是path/to/app/exe
因此,它在您的应用程序路径中找不到具有数据库连接详细信息的config/app.conf。beego/conf.go 中的负责人行-
appConfigPath = filepath.Join(AppPath, "conf", "app.conf")
init当您说时,这一切都发生在beego的功能中
import (
"github.com/astaxie/beego"
_ "path/to/routers"
)
哈克是-
使用 init 函数创建一个新的包/文件,它看起来有 -
package common
import (
"os"
"strings"
)
func init() {
cwd := os.Getenv("PWD")
rootDir := strings.Split(cwd, "tests/")
os.Args[0] = rootDir[0] // path to you dir
}
在这里您正在更改os.Args[0]并分配您的目录路径
确保在beego之前导入它,所以现在导入看起来像
import (
_ "path/to/common"
"github.com/astaxie/beego"
_ "path/to/routers"
)
最后你连接到数据库!
TA贡献1848条经验 获得超10个赞
您正在将您的应用程序初始化为
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator))))
beego.TestBeegoInit(apppath)
}
file调用者文件在哪里。
TestBeegoInit 是:
func TestBeegoInit(ap string) {
os.Setenv("BEEGO_RUNMODE", "test")
appConfigPath = filepath.Join(ap, "conf", "app.conf")
os.Chdir(ap)
initBeforeHTTPRun()
}
因此您的测试正在寻找配置的位置是
<this_file>/../conf/app.conf
这基本上是默认的配置文件。
基本上你无法连接到数据库。也许是因为您也在不知不觉中连接到默认数据库进行测试。我怀疑这不是你想要做的。
- 2 回答
- 0 关注
- 195 浏览
添加回答
举报