Воспроизведение модулей тестирования и FakeApplication

Я хотел бы знать, каков наилучший способ запуска тестов specs2 на модуле PlayFramework и возможности имитировать его работу.

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

->  /mymodule mymodule.Routes

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

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

1 ответ

FakeApplication на самом деле не запускает веб-процесс, поэтому вы не можете тестировать, используя http-доступ к localhost.

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

  • Тестирование контроллера напрямую
  • Тестирование роутера
  • Тестирование всего приложения.

Тестирование контроллера выполняется путем непосредственного вызова вашего контроллера и проверки результата, как предлагается в документации к игре, и предоставления 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)

  }
}

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

Другие вопросы по тегам