2016-11-24 9 views
0

У меня есть контроллер, написанный на Scala, который использует аутентификационный признак. Черта имеет isAuthenticated метод, как показано ниже:FakeApplication не содержит тело

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

В контроллере, мой метод использует метод признака, чтобы проверить, если пользователь прошел проверку подлинности или не до делать реальную работу:

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

Когда выполняя запрос POST (от Postman или UI), все работает так, как предполагалось, однако я испытываю серьезные проблемы при попытке модульных тестов.

Юнит-тесты являются следующими:

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

Теперь, если в моем контроллере я использую request.body.asJson я получаю None. Более того, если у меня есть (HeaderNames.CONTENT_TYPE, "application/json"), я получаю 400 (Bad Request) без ввода метода контроллера.

Я также пробовал использовать withBody() вместо withJsonBody(), но с тем же результатом. Отчаянно я даже пытался построить запрос с использованием реализации Java RequestBuidler(), но с точно такими же результатами.

Опять же, делая запрос, когда приложение работает, работает, только модульные тесты имеют проблемы. Используя debug, я увидел что-то странное, и это может быть проблемой. Как видно на изображении ниже, при выполнении модульного теста, «тело» в запросе пуст, однако тело в rh $ 1 существует и по мере того, как я его установил. При подаче заявки от Postman в приложение «тело» существует со значением, отправленным.

Debug screen

ответ

0

Решение (или обходной путь), чтобы использовать вызов() вместо того, чтобы применить():

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

Теперь все работает, как предполагалось.