簡體   English   中英

Play 2.0中的存根控制器

[英]Stub Controller in Play 2.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

}

在路由文件中,我以這種方式調用方法說Hello:

POST / hello控制器.Users.sayHello

在測試目錄中,我使用UserModel模擬創建了UsersController的子類。

package controllers

import org.specs2.mock.Mockito

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

現在,主要部分。 我按照前面提到的Jacob Jacobwater示例創建了一個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指向我在其中調用運行方法的行。

所以我的問題是:我在做什么錯?

我不確定您到底要做什么,但是問題“我在做什么錯了?”的答案 是:

參數“ additionalPlugins”用於其他Play插件,而“ controllers.UserControllersTest”不是Play插件。 它是一個控制器。

您可以在此處閱讀有關Play 2插件的信息: http ://www.objectify.be/wordpress/?p= 464

您是否嘗試過以下示例: http : //www.playframework.org/documentation/2.0.4/ScalaFunctionalTest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM