2016-10-17 42 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進行測試。