2017-12-31 63 views
1

Ktor(kotlin web framework)は、httpテストリクエストをユニットテストでラップすることができる素晴らしいテスト可能モードを備えています。彼らはGETエンドポイントをテストする方法の良い例を挙げていますが、私はhttp POSTに問題があります。hereKtorでポストリクエストをテストする

私はこれを試してみましたが、ポストのparamsは、リクエストに追加されていないようです:

@Test 
fun testSomePostThing() = withTestApplication(Application::myModule) { 
    with(handleRequest(HttpMethod.Post, "/api/v2/processing") { 
     addHeader("content-type", "application/x-www-form-urlencoded") 
     addHeader("Accept", "application/json") 
     body = "param1=cool7&param2=awesome4" 
    }) { 
     assertEquals(HttpStatusCode.OK, response.status()) 
     val resp = mapper.readValue<TriggerResponse>(response.content ?: "") 
     assertEquals(TriggerResponse("cool7", "awesome4", true), resp) 
    } 
} 

誰もが任意のアイデアがありますか?私のルーティングには、私は推測するために、彼らがしているもの厥) ユニットテストは、実際に現実的な問題をキャッチしました() 私は、

答えて

1

[OK]をダムのミス、私は、これは時間を無駄から誰かを保存した場合にそれをここに投稿します使用していた:

install(Routing) { 
     post("/api/v2/processing") { 
      val params = call.parameters 
      ... 
     } 
} 

しかし、これは 'get'パラメータにのみ有効です。投稿のパラメータには、

install(Routing) { 
     post("/api/v2/processing") { 
      val params = call.receive<ValuesMap>() 
      ... 
     } 
} 
0

コールバックが必要です。

get("api/{country}") { 
    val country = call.parameters["country"]!! 
    ... 
} 

これは、apiの後にuriで渡されたものを提供します。

call.receiveはリクエストの本体用です。

関連する問題