2016-08-24 12 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) 
    } 
} 

私はMyController上の方法messageFromResponseをテストするが、そのさえ構築していませんよ。私は私のプロジェクトのディレクトリに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は、常に最新のリリースを参照します。この場合、先週リリースされたGo1.7にResult()メソッドが追加されました。不確かな場合は、godoc -serverまたはgodoc <packagename>を実行して、ローカルのgodocを確認してください。

関連する問題