gpt4 book ai didi

go - Beego - 端点测试

转载 作者:IT王子 更新时间:2023-10-29 01:10:01 26 4
gpt4 key购买 nike

我正在测试 beego 的 http 自定义端点

package test

import (
"github.com/astaxie/beego"
. "github.com/smartystreets/goconvey/convey"
_ "golife-api-cons/routers"
"net/http"
"net/http/httptest"
"path/filepath"
"runtime"
"testing"
)

func init() {
_, file, _, _ := runtime.Caller(1)
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator))))
beego.TestBeegoInit(apppath)
}

// TestGet is a sample to run an endpoint test
func TestGet(t *testing.T) {
r, _ := http.NewRequest("GET", "/my/endpoint/fetches/data", nil)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)

beego.Trace("testing", "TestGet", "Code[%d]\n%s", w.Code, w.Body.String())

Convey("Subject: Test Station Endpoint\n", t, func() {
Convey("Status Code Should Be 200", func() {
So(w.Code, ShouldEqual, 200)
})
Convey("The Result Should Not Be Empty", func() {
So(w.Body.Len(), ShouldBeGreaterThan, 0)
})
})
}

当我使用 go test -v 运行时,

我得到响应 dial tcp :0: getsockopt: connection refused

我正在使用在本地运行的 MariaDB,我已经使用 netstat -tulpn 验证我的数据库运行良好(如果我使用 postman 并且我的服务器正在运行,我会得到一个有效的响应)

一个奇怪的观察,在包含 _ "golife-api-cons/routers"行之后 我什至在测试运行之前就得到了这个错误

我的测试通过了响应 200 OK,但是没有任何数据作为对上述错误的响应

编辑

TestBeegoInit函数使用的默认路径是/path/to/my/project/test这不是所需的路径,所以我也尝试提供绝对路径,但我仍然无法连接数据库。

最佳答案

经过多次尝试,我开始知道 beego 在 beego/conf.go 中初始化它的名为 AppPath 的变量,例如 -

AppPath, _ = filepath.Abs(filepath.Dir(os.Args[0]))

当您运行测试时,您可以使用 go test -v

运行它们

但结果 os.Args[0] 是文本可执行文件,它将是 /tmp/path/to/test 而不是 path/到/app/exe

因此,它找不到 config/app.conf,它位于您的应用程序路径中,其中包含数据库连接详细信息。beego/conf.go 中的负责行 -

appConfigPath = filepath.Join(AppPath, "conf", "app.conf")

这一切都发生在 beego 的 init 函数中,当你说

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"
)

最后连接到数据库!

关于go - Beego - 端点测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36983078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com