0

Play [2.0] の Mock Objectsの例に従っていますが、残念ながら成功していません。

UserModel を使用する UsersController があります。

trait UserModel extends ModelCompanion[User, ObjectId] {
 // ...
}

次に、抽象コントローラ

abstract class UsersController extends Controller {

  val userModel: UserModel

  def sayHello = Action(parse.json) { request =>
    // return a play Action. Doesn't use userModel
  }


  // Other methods

}

routes ファイルでは、次のように say Hello メソッドを呼び出します。

POST /hello controllers.Users.sayHello

テスト ディレクトリで、UserModel モックを使用して UsersController のサブクラスを作成しました。

package controllers

import org.specs2.mock.Mockito

object UserControllersTest extends UsersController with Mockito {
  val userModel = mock[models.UserModel]
}

では、本編です。前に述べたページの Jacob Groundwater の例に従って Spec テストを作成しました。FakeApplication の引数として、UserControllersTest の呼び出しを含めました。

package controllers

import org.specs2.mutable.Specification

import play.api.libs.json.Json
import play.api.test._
import play.api.test.Helpers._

class UsersSayHelloSpec extends Specification {

  running(FakeApplication()) {

    "Users.SayHello" should {

      def sendJson(jsonMap: Map[String, String], shouldBeCorrect: Boolean) = {
        running(new FakeApplication(
          additionalPlugins = Seq("controllers.UserControllersTest"))) {
          // Preapration 
          val jsonRequisition = Json.toJson(jsonMap)
          val Some(result) = routeAndCall(FakeRequest(POST,
              "/hello",
              FakeHeaders(Map("Content-Type" -> Seq("application/json"))),
              jsonRequisition))

            // ...
        }
      }

      "Not process a empty String" in {
        sendJson(Map.empty[String, String], false)
      }

      // Other tests calling sendJson ...
    }

  }

}

ただし、テストを実行すると、次のエラー メッセージが表示されました。

[info] Users.SayHello should
[error] ! Not process a empty String
[error]     PlayException: Cannot load plugin [Plugin [controllers.UserControllersTest] cannot been instantiated.] (Application.scala:171)
...
[error] play.api.Application.<init>(Application.scala:158)
[error] play.api.test.FakeApplication.<init>(Fakes.scala:141)
[error] controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5.sendJson$1(UsersSayHelloSpec.scala:20)
[error] controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5$$anonfun$apply$26.apply(UsersSayHelloSpec.scala:46)
[error] controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5$$anonfun$apply$26.apply(UsersSayHelloSpec.scala:46)

UsersSayHelloSpec.scala:20 は、実行中のメソッドを呼び出す行を参照します。

だから私の質問は次のとおりです。私は何を間違っていますか?

4

1 に答える 1

1

何をしようとしているのか正確にはわかりませんが、「何が間違っているのですか?」という質問に対する答えです。は:

パラメータ「additionalPlugins」は追加の Play プラグイン用であり、「controllers.UserControllersTest」は Play プラグインではありません。コントローラーです。

Play 2 プラグインについては、こちらをご覧ください: http://www.objectify.be/wordpress/?p=464

次の例を試しましたか: http://www.playframework.org/documentation/2.0.4/ScalaFunctionalTest ?

于 2012-11-08T19:47:50.730 に答える