이것은 prior question의 연속물로, FakeApplication에서 플러그인 사용에 대한 오해가 있음을 알았습니다.Play 2.0 : FakeApplication 대신 스텁 컨트롤러 호출
먼저 특성 및 특성을 내포 한 개체로 만든 모델이 있습니다.
trait UserModel extends ModelCompanion[User, ObjectId] {
// ...
}
object User extends UserModel
다음, 나는 사용자 개체를 사용하는 UserModel의 인스턴스를받는 추상 클래스, 그 각각의 구현으로 만든 컨트롤러를 가지고있다.
이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)
// ***************************************
// It will call UsersControllers.sayHello
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 ...
}
}
}
그래서 제 질문은 다음과 같습니다 :
package controllers
import org.specs2.mock.Mockito
object UserControllersTest extends UsersController with Mockito {
val userModel = mock[models.UserModel]
}
지금 내 UsersControllers 사양 시험이 있습니다
테스트 디렉토리에서abstract class UsersController extends Controller {
val userModel: UserModel
def sayHello = Action(parse.json) { request =>
// return a play Action. It doesn't use userModel
}
// Other methods
}
object Users extends UsersController(User)
, 나는 UserModel 모의를 사용하여 UsersController 스텁을 생성 어떻게 나는 FakeApplication에 실제 UserController 구현 대신 UserControllersTest를 사용하여 routeAndCall() 호출에서 "/ hello"URL을 호출 할 때 말합니까? 컨트롤러 자체
당신이 컨트롤러 자체를 테스트 할 때, 당신은 일반적으로 만들
- :