2015-07-16 8 views
6

Zaimplementowałem własny HttpErrorHander w Play Framework 2.4.2 i działa bardzo dobrze, ale teraz chcę móc testować z "Fake Actions", które celowo rzucają Wyjątki. Próbowałem w scalatest i specs2Test HttpErrorHandler ze skalatesami/specs2 w Play Framework 2.4.2

import play.api.http.HttpErrorHandler 
import play.api.mvc._ 
import play.api.mvc.Results._ 
import scala.concurrent._ 

class MyErrorHandler extends HttpErrorHandler { 

    def onClientError(request: RequestHeader, statusCode: Int, message: String) = { 
    Future.successful(
     Status(statusCode)("A client error occurred: " + message) 
    ) 
    } 

    def onServerError(request: RequestHeader, exception: Throwable) = { 
    Future.successful(
     InternalServerError("A server error occurred: " + exception.getMessage) 
    ) 
    } 
} 

próbowałem dotąd następujące testy. Próbuję debugować kod, ale nigdy nie wchodzę w moje metody. Metody play.api.http.DefaultHttpErrorHandler nie są wykonywane.

object ThrowableControllerSpec extends PlaySpecification with Results { 

    "Example Page" should { 


    "throwErrorAction should be valid" in { 
     val controller = new TestController() 
     val result: Future[Result] = controller.exceptionAction().apply(FakeRequest()) 
     //val bodyText: String = contentAsString(result) 
     status(result) mustEqual INTERNAL_SERVER_ERROR 
     //bodyText must be startingWith "A server error occurred:" 
    } 
    } 
} 

Akcja-metoda TestController.exceptionAction wygląda:

def exceptionAction() = Action { 
    if (true) 
    throw new Exception("error") 
    else 
    Ok("") 
} 

Druga próba:

class ApplicationSpec extends Specification { 
    "Application" should { 

    "sent 500 on server error" in new WithApplication { 
    route(FakeRequest(GET, "/exception")) must beSome.which(status(_) == INTERNAL_SERVER_ERROR) 
    } 

    } 
} 

a trasa dla /exception

GET  /exception    controllers.TestController.exceptionAction 

Dodałem również w application.confplay.http.errorHandler. Ale jak już powiedziałem, to działa, ale nie jestem w stanie go przetestować. Test zawsze kończy się niepowodzeniem z wyjątkami podanymi w exceptionAction.

góry dziękuję

+1

Być może jest to powiązane: https://github.com/playframework/playframework/issues/4857 – longliveenduro

+0

Rzeczywiście, wydaje mi się, że mam do czynienia z tym samym problemem. Spróbuję zasugerować obejście wskazanego linku i sprawdzić, czy działa. Zaktualizuję wtedy moje pytanie, jeśli będę miał czas, aby znów nad nim pracować. Dzięki. – maloku

Odpowiedz