在Play Framework 2.4.2中使用scalates/specs2测试HttpErrorHandler

在Play Framework 2.4.2中使用scalates/specs2测试HttpErrorHandler,scala,playframework,scalatest,specs2,playframework-2.4,Scala,Playframework,Scalatest,Specs2,Playframework 2.4,我已经在Play Framework 2.4.2中实现了自己的HttpErrorHander,它的功能非常好,但现在我希望能够使用故意抛出异常的“伪操作”进行测试。我已经尝试了scalatest和specs2 import play.api.http.HttpErrorHandler import play.api.mvc._ import play.api.mvc.Results._ import scala.concurrent._ class MyErrorHandler extends

我已经在Play Framework 2.4.2中实现了自己的HttpErrorHander,它的功能非常好,但现在我希望能够使用故意抛出异常的“伪操作”进行测试。我已经尝试了
scalatest
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)
    )
  }
}
到目前为止,我尝试了以下测试。我试图调试代码,但我从不输入我的方法。
play.api.http.DefaultHttpErrorHandler
的方法既不执行也不执行

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:"
    }
  }
}
TestController.exceptionAction
中的操作方法看起来:

def exceptionAction() = Action {
  if (true)
    throw new Exception("error")
  else
    Ok("")
}
第二次尝试:

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)
   }

  }
}
以及
/exception

GET        /exception               controllers.TestController.exceptionAction
我还添加了
application.conf
play.http.errorHandler
。但正如我所说,这是可行的,但我无法测试它。测试总是失败,出现
异常操作
中给出的异常


提前感谢您

如果您正在使用Specs2,请尝试此选项

await(controller.exceptionAction()(FakeRequest())) must throwA[Throwable] // or any error you want to test against
请参阅这些链接

  • (用于ScalaTest)

  • 希望这有帮助

    也许这是相关的:事实上,我似乎在处理同一个问题。我将尝试针对您的链接建议的解决方法,看看它是否有效。如果我有时间再做一次,我会更新我的问题。谢谢