В 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
Но в этом случае порт будет недоступен, пока не будет запущен тестовый сервер. И тестовый сервер не будет работать, пока приложение не будет создано.
Любая помощь будет оценена. Я довольно застрял.