Я пишу интеграционный тест, используя платформу Scala Play.
У меня в контроллере есть функция, которая выглядит следующим образом:
def myEndpoint: AnyAction = myActionProvider.securedEndpoint("myEndpoint") { implicit request =>
// Business logic
Ok("")
}
myActionProvider.securedEndpoint
объединяет некоторые компоновщики действий, используя andThen()
, и возвращает ActionBuilder
.
В моем интеграционном тесте у меня есть следующее:
val fakeRequest: FakeRequest = buildFakeRequest()
myController.myEndpoint.apply(fakeRequest)
Ложный запрос содержит сгенерированный токен безопасности и другие заголовки, необходимые для нашего приложения.
Я могу прорваться внутрь myActionProvider.securedEndpoint
и следить за исполнением. Однако я не могу взломать ни один из методов invokeBlock
, ни внутреннюю бизнес-логику контроллера. Ведение журнала показывает, что эти пути никогда не выполняются.
Если я сохраню результат myController.myEndpoint.apply(fakeRequest)
в переменной, его тип будет Accumulator[ByteString, Result]
. Похоже, что он содержит цепочки построителей действий и блок кода бизнес-логики, но Play никогда не выполнит его.
Код не генерирует исключений и ничего не выводится на консоль.
Мне было интересно, была ли это ошибка в моем тестовом синтаксисе. Я также попробовал следующее, но безрезультатно:
myController.myEndpoint { fakeRequest }
myController.myEndpoint()(fakeRequest)
И да, код работает в «обычном» режиме, например не тестирующая среда:)