Как переопределить порт в OneServerPerSuite для модульных тестов - PullRequest
0 голосов
/ 21 мая 2019

В Play 2.6 я мог переопределить порт. Но в Play 2.7 поле порта теперь окончательно. Несмотря на все мои усилия, Play, похоже, использует только произвольный порт вместо моего указанного порта.

В соответствии с документацией (https://www.playframework.com/documentation/2.7.x/ScalaFunctionalTestingWithScalaTest#Testing-with-a-server), вы должны переопределить порт или установить системное свойство testserver.port. Переопределение порта больше не работает, поскольку порт теперь является окончательным в ServerProvider. И установка testserver.port, по-видимому, не имеет аффекта.

package mytest.actions

import mytest.EssentialActionBuilder
import org.scalatestplus.mockito._
import org.scalatestplus.play.PlaySpec
import org.scalatestplus.play.guice.GuiceOneServerPerSuite
import play.api.Application
import play.api.mvc.Results.Ok
import play.api.mvc._
import play.api.test.Helpers._

import scala.concurrent.Future

class EssentialActionBuilderSpec extends PlaySpec with MockitoSugar with AuthenticatedApplicationBuilder with ControllerHelpers with GuiceOneServerPerSuite {
  override def fakeApplication(): Application = getBuilder.build

  val injector = app.injector
  val essentialActionBuilder = injector.instanceOf[EssentialActionBuilder]
  val action = injector.instanceOf[DefaultActionBuilder]

  "verifying this method request" must {
    "return an OK" in {
      val result = call(essentialActionBuilder.doSomething { implicit request =>
        action.async { implicit request =>
          Future.successful(Ok)
        }
      }, generateFakeRequest("test"))

      status(result) mustEqual OK
    }
  }
}

В моих тестовых случаях у меня есть несколько зависимых классов, которые читают порт из конфигурации. Итак, вот почему мне нужно указать порт здесь. Без некоторого серьезного рефакторинга я не могу просто сказать этому зависимому классу использовать случайно сгенерированную переменную port.

Если бы был какой-то способ установить конфигурацию на port, он бы тоже работал.

override def fakeApplication(): Application = getBuilder.configure("myport" -> port).build

Но в этом случае порт будет недоступен, пока не будет запущен тестовый сервер. И тестовый сервер не будет работать, пока приложение не будет создано.

Любая помощь будет оценена. Я довольно застрял.

...