Когда я запускаю приложение Play Scala 2.6 с включенной интернационализацией, страница отображается со всем содержимым, правильно подобранным из моего файла messages.en
.
Но когда я тестирую свой контроллер, один изПри проверке содержимого страницы тестирование не выполняется (contentAsString(result) must include ("Welcome to Play")
).
Тест не пройден, поскольку содержимое страницы отображается как label.welcome_to_play
вместо Welcome to Play!
.Это происходит только тогда, когда я отображаю страницу индекса из нового экземпляра контроллера.Когда я тестирую, отрисовывая страницу из приложения или маршрутизатора, проходит тот же тест (contentAsString).
У вас есть идеи, почему это происходит?
Это мой HomeController.scala
:
@Singleton
class HomeController @Inject()(cc: ControllerComponents)
extends AbstractController(cc) with I18nSupport {
def index() = Action { implicit request: Request[AnyContent] =>
Ok(views.html.index())
}
}
А это мой HomeControllerSpec.scala
тест:
class HomeControllerSpec extends PlaySpec
with GuiceOneAppPerTest
with Injecting
with Results {
"Calling HomeController.index" should {
"render the index page from a new instance of controller" in {
val controller = new HomeController(stubControllerComponents())
val result = controller.index().apply(FakeRequest(GET, "/"))
status(result) mustBe OK
contentType(result) mustBe Some("text/html")
// THIS IS WHERE THE TEST FAILS. Content appears as "label.welcome_to_play"
contentAsString(result) must include ("Welcome to Play")
}
"render the index page from the application" in {
val controller = inject[HomeController]
val home = controller.index().apply(FakeRequest(GET, "/"))
status(home) mustBe OK
contentType(home) mustBe Some("text/html")
// WHILE THIS IS PASSING
contentAsString(home) must include ("Welcome to Play")
}
"render the index page from the router" in {
val request = FakeRequest(GET, "/")
val home = route(app, request).get
status(home) mustBe OK
contentType(home) mustBe Some("text/html")
// AND THIS IS PASSING
contentAsString(home) must include ("Welcome to Play")
}
}
}
А это мой index.scala.html
просмотр:
@()(implicit messagesProvider: MessagesProvider)
@main(messagesProvider.messages("label.welcome_to_play")) {
<h1>@messagesProvider.messages("label.welcome_to_play")</h1>
}
Вот какмой messages.en
файл выглядит следующим образом:
label.welcome_to_play = Welcome to Play!
В моем файле conf
есть следующая конфигурация:
play.i18n {
langs = [ "en" , "lv ]
}
Я попытался переименовать файл с messages.en
на messages
но это не помогло.
Кто-нибудь знает, почему тест не пройден?Почему файл сообщений не используется при рендеринге страницы из нового экземпляра моего контроллера?Заранее благодарю за помощь:)