Beego - 端点测试

我正在测试 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我的数据库运行良好(如果我使用邮递员并且我的服务器正在运行,我会得到有效的响应)


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


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


编辑


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


犯罪嫌疑人X
浏览 196回答 2
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 commonimport (    "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")最后你连接到数据库!

慕桂英546537

您正在将您的应用程序初始化为apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator))))&nbsp; &nbsp; beego.TestBeegoInit(apppath)}file调用者文件在哪里。TestBeegoInit 是:func TestBeegoInit(ap string) {&nbsp; &nbsp; os.Setenv("BEEGO_RUNMODE", "test")&nbsp; &nbsp; appConfigPath = filepath.Join(ap, "conf", "app.conf")&nbsp; &nbsp; os.Chdir(ap)&nbsp; &nbsp; initBeforeHTTPRun()}因此您的测试正在寻找配置的位置是<this_file>/../conf/app.conf这基本上是默认的配置文件。基本上你无法连接到数据库。也许是因为您也在不知不觉中连接到默认数据库进行测试。我怀疑这不是你想要做的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go