【问题标题】:Test HttpErrorHandler with scalates/specs2 in Play Framework 2.4.2在 Play Framework 2.4.2 中使用 scalates/specs2 测试 HttpErrorHandler
【发布时间】:2015-10-06 14:06:56
【问题描述】:

我已经在 Play Framework 2.4.2 中实现了我自己的 HttpErrorHander,它的功能非常好,但现在我希望能够使用故意抛出异常的“假动作”进行测试。我试过scalatestspecs2

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


【解决方案1】:

如果你使用 Specs2,试试这个

await(controller.exceptionAction()(FakeRequest())) must throwA[Throwable] // or any error you want to test against

查看这些链接。

  1. https://twitter.github.io/scala_school/specs.html
  2. http://www.scalatest.org/user_guide/using_assertions(用于 ScalaTest)
  3. http://www.scalatest.org/getting_started_with_fun_suite

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2013-11-02
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多