Pruebe HttpErrorHandler con scalates/specs2 en Play Framework 2.4.2
playframework scalatest (1)
Implementé mi propio HttpErrorHander en Play Framework 2.4.2 y funciona muy bien, pero ahora quiero poder probar con "Fake Actions" que intencionalmente lanzan Exceptions. Lo he intentado en scalatest
y specs2
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)
)
}
}
Intenté hasta ahora las siguientes pruebas. Intento depurar el código, pero nunca ingreso mis métodos. Los métodos de play.api.http.DefaultHttpErrorHandler
no se ejecutan.
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:"
}
}
}
El método de Acción en TestController.exceptionAction
ve:
def exceptionAction() = Action {
if (true)
throw new Exception("error")
else
Ok("")
}
El segundo intento:
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)
}
}
}
Y la ruta para /exception
GET /exception controllers.TestController.exceptionAction
También agregué en application.conf
play.http.errorHandler
. Pero como dije, esto está funcionando, pero no puedo probarlo. La prueba siempre falla con la excepción dada en exceptionAction
.
Gracias de antemano
Si está utilizando Specs2, intente esto
await(controller.exceptionAction()(FakeRequest())) must throwA[Throwable] // or any error you want to test against
Vea estos enlaces.
- https://twitter.github.io/scala_school/specs.html
- http://www.scalatest.org/user_guide/using_assertions (para ScalaTest)
- http://www.scalatest.org/getting_started_with_fun_suite
¡Espero que esto ayude!