2016-04-22 9 views
0

私は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

+0

[URL Fetch](https://cloud.google.com/appengine/docs/go/urlfetch/)を使用して外部のFacebookサービスを呼び出す – Mark

+0

'context'ポインタを取得することは、コンテキストポインタ(memcache、データストア、電子メールなど)を使用していますが、エンドポイントをテストするためにインスタンスを使用するのは、動作する 'http.Request'を作成する唯一の方法ですが、ドキュメントはかなり弱いので、表示されていません。 – chris

答えて

0

を取得エラーですブラックボックスのテストですが、のようにappengineで元に戻すことができます。代わりに、私は今エンドポイントで直接テストを実行しています。私はあなたが、NewInstanceメソッドを必要とする代わりに、[aetest.NewContextを()](https://cloud.google.com/appengine/docs/go/tools/localunittesting/)を作成し、そのコンテキストを使用しないかもしれないと思う

req, _ := inst.NewRequest("POST", "/auth", reader) 
req.Header.Add(AppAuthToken, "foobar") 
resp := httptest.NewRecorder() 

handlePostAuth(resp, req) 
assert.Equal(t, http.StatusCreated, resp.Code) 
関連する問題