2017-12-31 28 views
1

Ktor (kotlin 웹 프레임 워크)는 http 테스트 요청을 단위 테스트로 감쌀 수있는 멋진 테스트 모드를 제공합니다. 그들은 GET 끝점을 테스트하는 좋은 예를 보여줍니다. here, 그러나 http POST에 문제가 있습니다.Ktor의 게시물 요청 테스트

내가 포스트 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) 
    } 
} 

누구나 어떤 아이디어가? 내 라우팅 I에서) 그들은 내가 추측에 대한하는지 이잖아 단위 테스트가 실제로 실제 문제를 (잡기되었다 )

답변

1

확인 바보 같은 실수는, 나는이 시간을 낭비에서 다른 사람을 절약 여기 경우를 게시합니다 사용 중이 었음 :

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

그러나 'get'매개 변수에서만 작동합니다. 게시 매개 변수는 다음이 필요합니다.

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

call.parameters는 게시 경로에도 사용할 수 있습니다.

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

이렇게하면 api 후에 uri에 전달 된 내용이 모두 표시됩니다.

call.receive는 요청 본문입니다.