2016-10-17 41 views
0

这是我的控制器看起来像Beego端点测试 - 空请求URI

func (o *MyController) Get() { 
    uri := o.Ctx.Input.URI() 
    beego.Trace(uri) 
} 

现在,如果我做出例如“http://localhost:8081/path?key=value”对应的端点的请求,我得到的URI正确的值

但是,如果我用下面的代码测试它

func TestGet(t *testing.T) { 
    Convey("valid request case", t, func() { 
     w := httptest.NewRecorder() 
     uri := "/path?key=value" 
     r, _ := http.NewRequest("GET", uri, nil) 
     beego.BeeApp.Handlers.ServeHTTP(w, r) 
     So(w.Code, ShouldEqual, 200) 
    }) 
} 

URI在控制器是空字符串

然而,o.Ctx.Request.URL.Path具有正确的值,即 '/路径'

回答

0

根据文档https://golang.org/pkg/net/http/#NewRequest

NewRequest返回适于与Client.Do或运输中使用的Request 。往返。要创建与测试服务器处理程序一起使用的请求,请使用ReadRequest或手动更新请求字段。

对于golang 1.7,应当使用用于创建请求下面的方法用于测试https://golang.org/pkg/net/http/httptest/#NewRequest

NewRequest返回一个新的接收服务器请求时,适合于传递给一个http.Handler进行测试。