3

私のプレイ フレームワーク アプリケーションは (Java ではなく) scala です。ルートの単体テストにユーティリティ クラス play.test.Helpers を使用する方法を説明しているページを見つけました。例は、scala ではなく Java でした。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)
    }
  }
}

私のアクションが Java ではなく Scala であるため、問題はありますか? 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)
  }

}

また、routeAndCallnull を返しません。Option[Result]、つまりSome[Result]orを返すNoneため、この場合 null チェックは機能しません。

于 2012-12-31T03:52:53.300 に答える