2016-08-24 130 views
3

所以这一个真的很奇怪,我试图得到一个模拟响应呈现JSON。我的测试是这样的:httptest.ResponseRecorder没有字段或方法结果

import (
    "fmt" 
    "net/http" 
    "net/http/httptest" 
    "reflect" 
    "strings" 
    "testing" 
) 
... 

func TestMessageFromResponse(t *testing.T) { 
    mc := MyController{} 
    body := "{ \"message\":\"kthxbai\" }" 
    w := httptest.NewRecorder() 
    w.Write([]byte(body)) 
    resp := w.Result() 
    msg := mc.messageFromResponse(resp) 
    if msg != "kthxbai" { 
     t.Errorf("Expected response body to be kthxbai but was %s", msg) 
    } 
} 

我测试的方法messageFromResponseMyController但它甚至没有建立。当我在我的项目目录中运行go test,我得到以下错误:

./my_controller_test.go:115: w.Result undefined (type *httptest.ResponseRecorder has no field or method Result) 

我还要提到的是,我成功地利用httptest.ResponseRecorder在此同一文件的其他作家存根,但它只是没有当我尝试访问Result()

+0

您使用的是哪个版本的Go?我发现* httptest.ResponseRecorder在官方(1.7)godoc上有一个Result()方法,但是当我运行我的本地godoc时(我目前仍然安装了1.6)我无法找到它。 编辑:果然,[这是Go1.7的一个新功能](https://golang.org/doc/go1.7#net_http_httptest) –

+0

如果你认为你已经升级到1.7,它可能仍然值得尝试清理安装Go的目录,然后放入一个“全新的”Go1.7目录,然后在再次尝试测试之前删除“pkg”和“bin”目录。 –

+0

呃......很好!我期待这一点,但我一定错过了。谢谢! – onetwopunch

回答

2

我初步解决了这一评论,因为我不能确定的相关性,但为后人:

在线godoc始终引用最新版本。在这种情况下,Result()方法被添加到Go1.7,它只在上周发布。如有疑问,请通过运行godoc -servergodoc <packagename>来查看当地godoc。

相关问题