2016-08-24 62 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。

相關問題