使用动态细分构建休假请求

时间:2018-10-05 01:54:38

标签: rest go

我正在尝试测试处理程序,该处理程序如下:

router.HandleFunc("/address/{id}", DeletePerson).Methods("DELETE")

我创建的请求是:

request, _ := http.NewRequest("DELETE", "/address/2", nil)
DeletePerson(response, request)

我尝试使用github.com/gorilla/mux提取“ id”

params = mux.Vars(request)
item := params["id"]

returns:  params = map[] and item = ""

但是,如果我使用curl命令调用DeletePerson:

curl -X DELETE http://localhost:8000/address/2

我得到:params = map [“ id”]和item =“ 2”

我如何构造一个URL请求来获得类似Curl的结果?

2 个答案:

答案 0 :(得分:0)

如果直接调用DeletePerson,则请求不会通过路由器,后者会解析请求路径中的参数。

此外,http.NewRequest返回一个客户请求。将方案和主机添加到URL,然后将请求传递到http.Client.Do,或使用httptest.NewRequest直接创建服务器请求。

  

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

request := httptest.NewRequest("DELETE", "/address/2", nil)
mux.ServeHTTP(response, request)

答案 1 :(得分:0)

我认为问题在于您没有在请求中放入完整的URL。而且我猜您在执行请求时会忽略该错误。如果您未输入完整的URL,它将抱怨类似以下内容:panic: Delete /address/2: unsupported protocol scheme ""

以下代码在我的机器上可以正常运行:

package main

import "net/http"

func main() {
    r, err := http.NewRequest("DELETE", "http://localhost:8080/address/2", nil)
    if err != nil {
        panic(err)
    }
    if _, err := http.DefaultClient.Do(r); err != nil {
        panic(err)
    }
}

希望这会有所帮助:)