2016-11-24 1 views
0

인증 특성을 사용하는 스칼라로 작성된 컨트롤러가 있습니다. 형질이 IsAuthenticated는 방법을 아래와 같이 가지고FakeApplication에 본문이 없습니다.

def createFileMetadata() = isAuthenticated { user => implicit request => 
    { 
    .... 
    } 

: 컨트롤러의

def isAuthenticated(f: => AccountDTO => Request[AnyContent] => Result) = 
Security.Authenticated(username, onUnauthorized) { user => 
    Action.async { 
    request => { 
     Future.successful(f(user)(request)) 
    } 
    } 
} 

내 방법은 사용자가 인증 여부 전에 실제 작업을 수행하는 경우 확인 형질 방법을 사용 Postman 또는 UI에서 POST 요청을하는 것은 의도 한대로 모두 작동하지만, 단위 테스트를 할 때 심각한 문제에 직면하고 있습니다. 내 컨트롤러에서 나는 request.body.asJson를 사용하는 경우

val goodRequest = FakeRequest(POST, url).withJsonBody([a JsObject]).withHeaders((HeaderNames.AUTHORIZATION, "someMockToken")) 

는 지금, 나는 None을 얻을 다음과 같이

단위 테스트입니다. 또한 (HeaderNames.CONTENT_TYPE, "application/json")을 가지고 있다면 제어기 메소드를 입력하지 않고도 400 (잘못된 요청)이 발생합니다.

또한 withJsonBody() 대신 withBody()을 사용했지만 동일한 결과가 나타났습니다. 절망적으로 나는 심지어 자바 구현 RequestBuidler()을 사용하여 요청을 만들려고했지만 정확한 결과는 똑같습니다.

다시 말해 앱이 실행 중일 때 요청하면 작동하지만 단위 테스트에만 문제가 있습니다. 디버그를 사용하여 이상한 것을 보았는데 이것이 문제가 될 수 있습니다. 아래 이미지에서 볼 수 있듯이 단위 테스트를 실행할 때 요청의 'body'는 비어 있지만 rh $ 1의 본문이 존재하며 설정 한대로입니다. Postman에서 응용 프로그램으로 요청할 때 보낸 '값'이있는 '본문'이 있습니다.

Debug screen

답변

0

솔루션 (또는 해결 방법)) (전화를 (사용) 대신에 적용했다 : 의도 한대로

val result = call(filesController.createFileMetadata(), goodRequest) 

이제 모든 것이 작동합니다.

관련 문제