2013-05-16 5 views
5

Я хотел бы знать, что лучше всего запустить тесты specs2 в модуле PlayFramework и смоделировать его.Play modules test & FakeApplication

Мой модуль содержит некоторые маршруты в файл с именем mymodule.routes В моих приложениях я интегрировать их, добавив следующую строку в моих маршрутах файл

-> /mymodule mymodule.Routes 

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

"test myroute" in { 
    running(FakeApplication()) { 
    await(WS.url("http://localhost:9000/mymodule/myroute").get).status must equalTo(OK) 
    } 
} 

ответ

4

FakeApplication действительно не обед веб-процесс, так что вы не можете проверить с помощью доступа HTTP к локальной машине.

У вас есть три варианта:

  • Тестирование контроллера непосредственно
  • Testing маршрутизатор
  • Тестирование все приложение.

Тестирование контроллера осуществляется с помощью прямого вызова контроллера и проверки результатов, как это было предложено в игровой документации, а также обеспечение FakeRequest()

val result = controllers.Application.index("Bob")(FakeRequest()) 

Тестирование маршрутизатора осуществляется вызовом routeAndCall с FakeRequest аргумент, указав относительный путь:

val Some(result) = routeAndCall(FakeRequest(GET, "/Bob")) 

в конце концов, если вы хотите проверить всю вашу заявку, вы должны начать TestServer:

"run in a server" in { 
    running(TestServer(3333)) { 

    await(WS.url("http://localhost:3333").get).status must equalTo(OK) 

    } 
} 

В вашем вопросе говорится: «Какой вариант лучше?». Ответ таков: нет ничего такого, как лучший вариант, есть разные способы тестирования для разных целей. Вы должны выбрать стратегию тестирования, которая лучше соответствует вашим требованиям. В этом случае, поскольку вы хотите протестировать маршрутизатор, я предлагаю вам попробовать подход n.2

+0

спасибо, что это имеет смысл, однако я не знаю, что делать для маршрутов, потому что они возвращают 404, если они не реализованы родительского приложения. Я попытался добавить основной файл маршрута в модуль только для теста, но он не работает, если я не удалю mymodule.routes – Roch

+0

Как вы их тестируете? – Edmondo1984

+0

, вызвав их URL-адрес, используя playframework WS api – Roch

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