私はappengineを使用するときにエンドポイントテストを作成しようとしています。残念ながら、テスト*Request
構造体の作成時に使用されるURL内にスキーマ(およびホスト)がないため、テストは失敗し続けます。 appengineテストを実行すると、セミランダムポート番号で実行される特定のテスト用にサーバーが生成されます。このため、テストを実行するための完全なURLを定義することは不可能に見えます。Go Appengineエンドポイントテストの問題
このような実行テストではofficial docsは非常にまばらで、例の半分しか与えないので、これを動作させる方法について頭を悩ませました。
これは私が実際にAPIを実行するために期待していた私は、コードスニペット内標線から Error: Received unexpected error "Post /auth: unsupported protocol scheme \"\""
テストコード
func TestEndpoints_Auth(t *testing.T) {
// input data
account := Account{
AuthProvider: "facebook",
AuthProviderId: "123345456",
}
b, _ := json.Marshal(&account)
reader := bytes.NewReader(b)
// test server
inst, err := aetest.NewInstance(nil)
if !assert.NoError(t, err) { return }
defer inst.Close()
// request
client := http.Client{}
req, err := inst.NewRequest("POST", "/auth", reader)
if !assert.NoError(t, err) { return }
req.Header.Add(AppAuthToken, "foobar")
resp, err := client.Do(req)
if !assert.NoError(t, err) { return } // <=== Where the error occurs
// tests
if !assert.Nil(t, err) { return }
assert.Equal(t, http.StatusCreated, resp.StatusCode)
}
ログ [GIN-debug] POST /auth --> bitbucket.org/chrisolsen/chriscamp.(*endpoints).Auth-fm (5 handlers) [GIN-debug] GET /accounts/me --> bitbucket.org/chrisolsen/chriscamp.(*endpoints).GetMyAccount-fm (7 handlers) INFO 2016-04-22 13:23:39,278 devappserver2.py:769] Skipping SDK update check. WARNING 2016-04-22 13:23:39,278 devappserver2.py:785] DEFAULT_VERSION_HOSTNAME will not be set correctly with --port=0 WARNING 2016-04-22 13:23:39,345 simple_search_stub.py:1126] Could not read search indexes from c:\users\chris\appdata\local\temp\appengine.testapp\search_indexes INFO 2016-04-22 13:23:39,354 api_server.py:205] Starting API server at: http://localhost:54461 INFO 2016-04-22 13:23:41,043 dispatcher.py:197] Starting module "default" running at: http://localhost:54462 INFO 2016-04-22 13:23:41,046 admin_server.py:116] Starting admin server at: http://localhost:54466
[URL Fetch](https://cloud.google.com/appengine/docs/go/urlfetch/)を使用して外部のFacebookサービスを呼び出す – Mark
'context'ポインタを取得することは、コンテキストポインタ(memcache、データストア、電子メールなど)を使用していますが、エンドポイントをテストするためにインスタンスを使用するのは、動作する 'http.Request'を作成する唯一の方法ですが、ドキュメントはかなり弱いので、表示されていません。 – chris