如何测试http.Redirect使用正确的重定向URI?

时间:2019-07-30 15:03:27

标签: go testing

我有一个使用net/http包的Go后端。我有一个端点,该端点将使用一些生成的GET参数使用http.Redirect重定向到提供的重定向URI。我只想使用net/http/httptesttesting测试我的端点是否重定向到正确的URL。

我已使用ServeHTTP执行了请求,并可以验证它是否返回正确的状态码(在这种情况下为303)。然后,我尝试访问“请求URL”以找到最近访问过的URL(我以为重定向URL),但是无法访问此变量。

req, _ := http.NewRequest("GET", "https://www.urlthatredirects.com"), nil)
w := httptest.NewRecorder()
MyRouterMux().ServeHTTP(w, req)
resp := w.Result()

redirectUrl := resp.Request.URL

在此示例中,我希望redirectUrl变量包含重定向到的URL,但我收到[signal SIGSEGV: segmentation violation ...]

有什么想法吗?从手动测试中我知道端点可以按预期工作,但是我只需要通过测试证明它可以正常工作。

1 个答案:

答案 0 :(得分:0)

由于评论,我发现我在错误的位置寻找重定向URL。评估此错误的正确方法是从Location标头中捕获网址。

w := httptest.NewRecorder()
MyRouterMux().ServeHTTP(w, req)
resp := w.Result()

redirectUrl, err := resp.Location()