3

我的游戏框架应用程序在 scala 中(不是 Java)。我找到了一个描述如何使用实用程序类 play.test.Helpers 进行单元测试路由的页面。该示例是在 Java 中,而不是 scala。我在 scala 中编写了测试,但出现错误“消息:这不是 JavaAction,不能以这种方式调用。”

这是我找到的描述如何在 play framework 2.0 中对路线进行单元测试的页面:http: //digitalsanctum.com/2012/05/28/play-framework-2-tutorial-testing/

...这是我尝试编写来测试我的应用程序的代码:

package conf
import org.scalatest._
import play.mvc.Result
import play.test.Helpers._

class routeTest extends FunSpec with ShouldMatchers {

  describe("route tests") {
    it("") {
      // routeAndCall() fails.  Message: This is not a JavaAction and can't be invoked this way.
      val result = routeAndCall(fakeRequest(GET, "/"))
      result should not be (null)
    }
  }
}

问题是因为我的操作是 Scala 而不是 Java?我可以通过 Scala 控制器对我的路由进行单元测试吗?

4

1 回答 1

6

您应该使用play.api.*来自 Scala 代码的导入。play.*是一个Java API。所以你的代码应该是这样的:

package conf

import org.scalatest._
import org.scalatest.matchers._
import play.api._
import play.api.mvc._
import play.api.test.Helpers._
import play.api.test._

class routeTest extends FunSpec with ShouldMatchers {
  describe("route tests") {
    it("GET / should return result") {
      val result = routeAndCall(FakeRequest(GET, "/"))
      result should be ('defined)
    }
  }
}

甚至更好地使用FlatSpec

package conf

import org.scalatest._
import org.scalatest.matchers._
import play.api._
import play.api.mvc._
import play.api.test.Helpers._
import play.api.test._

class routeTest extends FlatSpec with ShouldMatchers {

  "GET /" should "return result" in {
    val result = routeAndCall(FakeRequest(GET, "/"))
    result should be ('defined)
  }

  it should "return OK" in {
    val Some(result) = routeAndCall(FakeRequest(GET, "/"))
    status(result) should be (OK)
  }

}

此外,routeAndCall不返回 null。它返回Option[Result], 即Some[Result]or None,所以在这种情况下 null 检查不起作用。

于 2012-12-31T03:52:53.300 回答