2015-02-25 3 views
0

У меня есть проект Play 2.3 с sub-project внутри. После этого tutorial я пишу тест для контроллера подпроекта с route метода:Как сделать метод маршрута работает в подпроекте Play 2.x?

"Get Action" in new WithApplication { 
    val Some(result) = route(FakeRequest(GET, "/sub/bob/11")) 

    status(result) mustEqual OK 
} 

приобретаемого при routes.conf, подпроект маршрутов сконфигурировано так:

-> /sub sub.Routes 

И в sub.Routes, он содержит:

GET /bob/:id controllers.sub.BobController.get(id: Int) 

Однако метод route() всегда возвращает None. Использование route(FakeRequest(GET, "/bob/11")) тоже не работает.

В настоящее время я могу только решить эту проблему путем прямого вызова к методу контроллера:

val result = BobController.get(11)(FakeRequest(GET, "/bob/11")) 

В этом случае параметр «11» в «/ боб/11» стать бесполезным, так как он не используется.

Так кто знает, как сделать маршрут() работает для подпроекта?

ответ

1

Попробуйте установить application.router файла FakeApplication в файл подмодуля.

Например:

class SubModuleRouteSpec extends PlaySpecification with After { 
    lazy val app = FakeApplication(additionalConfiguration = Map("application.router" -> "sub.Routes")) 

    "SubModule route" should { 

    "Get Action" in new WithApplication(app) { 
     val result = route(FakeRequest(GET, "/bob/11")).get 
     println(contentAsString(result)) 
     result must not beNull 
    } 
    } 

    override def after: Any = Play.stop() 
} 
+0

Благодаря человеку, это работает. – null

+0

Но зачем нужно 'Play.stop()'? – null

+0

Добро пожаловать. Извините, в этом примере вы можете просто игнорировать его. Если вам нужно создать новую FakeApplication для каждого тестового примера (Get Action 1, Get Action 2, Get Action 3 и т. Д.), Вы можете использовать Play.stop() для очистки ресурсов. –

Смежные вопросы