如何使用OneServerPerSuite编写生产服务器测试

时间:2016-10-27 03:38:05

标签: playframework-2.0

我把它放在生产服务器上之后尝试测试我的Play 2.5 app。基本上我只想运行在我的ApplicationSpec.scala中使用生产服务器设置编写的相同测试。我按照文档但未能创建应用程序实例:

import play.api.test.Helpers.{GET => GET_REQUEST, _}
import play.api.test._

class ProductionSpec extends PlaySpec with OneServerPerSuite {

  implicit override lazy val app =
    new GuiceApplicationBuilder().disable[EhCacheModule].router(Router.from {
      case GET(p"/") => Action { play.api.mvc.Results.Ok("ok") }
    }).build()
  "AuthController" should {

      "initialize tables" in {
        val init = route(app, FakeRequest(GET, "/init")).get
        status(init) mustBe OK
      }
  }
}

错误是

ProductionSpec.scala:25: not found: value GET 
...
ProductionSpec.scala:25: value p is not a member of StringContext

如何测试在生产环境中运行的应用程序?

1 个答案:

答案 0 :(得分:0)

问题在于混合GETs并且您正在测试一条路线并请求其他路线

首先,您有两个GETs(每个库中一个)

play.api.test.Helpers._

play.api.routing.sird._

其次,您初始化此路线GET(p"/")但请求此路线route(app, FakeRequest(GET, "/init")).get

我修复了代码并且可以正常工作

import org.scalatestplus.play._
import play.api.test._
import play.api.test.Helpers._

import play.api.mvc._
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.routing._
import play.api.routing.sird._
import play.api.cache.EhCacheModule
import play.api.libs.ws.WSClient

class ProductionSpec extends PlaySpec with OneServerPerSuite {

  implicit override lazy val app =
    new GuiceApplicationBuilder().disable[EhCacheModule].router(Router.from {
      case play.api.routing.sird.GET(p"/init") => Action { play.api.mvc.Results.Ok("ok") }
    }).build()
  "AuthController" should {

      "initialize tables" in {
        val init = route(app, FakeRequest(play.api.test.Helpers.GET, "/init")).get
        status(init) mustBe OK
      }
  }
}

您应该知道何时使用每个GET

我希望这会有所帮助