【发布时间】:2015-10-06 14:06:56
【问题描述】:
我已经在 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 中的 Action-method 看起来:
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.confplay.http.errorHandler。但正如我所说,这是可行的,但我无法对其进行测试。测试总是失败并出现exceptionAction 中给出的异常。
提前谢谢你
【问题讨论】:
-
确实,我似乎正在处理同样的问题。我将尝试指向您的链接的建议解决方法,看看它是否有效。如果我有时间再次处理它,我会更新我的问题。谢谢。
标签: scala playframework scalatest specs2 playframework-2.4