2012-11-09 6 views
1

이것은 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을 호출 할 때 말합니까? 컨트롤러 자체

  • 는 HTTP 라우터는
  • 당신이 컨트롤러 자체를 테스트 할 때, 당신은 일반적으로 만들

    • :

    답변

    0

    테스트 할 수있는 응용 프로그램의 두 개의 서로 다른 부분이 있습니다 요청을 받고 직접 컨트롤러 메서드에 전달하면 응답을 생성합니다. 그런 다음 테스트 결과를 확인하기 위해 해답을 일부 검증합니다.

    라우터를 테스트 할 때 테스트하려는 것은 요청이 올바른 컨트롤러 방법으로 라우팅된다는 것입니다. 직접 URL을 호출하고 예상 한 컨트롤러에서 기대하는 결과인지 확인합니다.

    는 당신이 나에게 많은 이해가되지 않습니다하려고 노력하고 있습니다 :

    노선의 경우/안녕하세요 나는 dummyController이 있고, 의지 경로 /인사에 내 게시물은 제대로 작동? 경로 파일이 실제로 경우, 라우터로 작동하는 스칼라 클래스로 컴파일 (내가 확실하지 않다) 같은 동적 라우팅 기능을 플레이에서 사용할 수 있기 때문에

    , 당신은 할 것이다에 :

    • 다른 컨트롤러
    에 새로운 경로 점을 추가/안녕하세요 경로
  • 의 기존 경로를 삭제