【发布时间】:2018-01-06 02:24:03
【问题描述】:
我目前正在学习 Golang 进行 Web 编程,现在我继续学习数据库、Rest API 和 Golang 测试。
现在我遇到了 Goose 数据库迁移和 Go 测试 集成的问题。
我想将 goose 迁移集成到我的 Go 测试代码中,我的方案是在测试之前启动所有迁移,然后在测试完成后重置所有数据库。
我的问题是我找不到任何文档/示例代码来使用Goose。
我也尝试过使用 exec.Command() 执行 goose 命令,但它总是返回 exit status 1
这是我现有的代码,用于在执行测试之前触发向上迁移:
func pretest() {
var args = []string{
os.Getenv("DB_SERVER"),
"\"user=" + os.Getenv("DB_USERNAME") + " dbname=" + os.Getenv("DB_TEST_NAME") + " sslmode=disable\"",
"up",
}
exe := exec.Command("goose", args...)
exe.Dir = os.Getenv("DB_MIGRATION")
/* result, err := exe.Output()*/
//fmt.Println(string(result))
/*fmt.Println(err)*/
output := exe.Run()
fmt.Println(output)
}
$ go test -v
exit status 1
testing: warning: no tests to run
PASS
ok
我的问题是可以从 Go 代码(在这种情况下是测试代码)内部触发迁移(向上/向下/重置)吗?
为什么 exec.Command() 一直返回 code status 1 但是当我执行另一个 linux 命令时它运行良好(ls、pwd、mkdir 在相同的情况下运行良好方式)?
【问题讨论】:
-
请勿发布文字图片。它们不可搜索,甚至无法读取。请复制并粘贴所有文本内容。
-
解决您的问题:
is it possible to trigger migration (up/down/reset) from inside Go Code?您可以为所欲为。你试过什么?你遇到了什么问题? -
@Flimzy 就像我之前说的那样,我需要在测试运行之前迁移所有迁移,然后在测试完成后迁移重置。
-
你没有回答我的问题。你试过什么?你遇到了什么问题?
-
我正在尝试测试我的 Rest API 代码,这需要在测试运行之前准备好我的数据库表。我的问题是我无法在单元测试之前设置 goose 迁移来迁移所有表
标签: database testing go database-migration