ScalaJs с платформой Play (ошибка в тестах)

Я пытаюсь использовать проект кросс-сборки ScalaJs с Play Framework 2.5. Я сталкиваюсь с проблемой, когда пытаюсь запустить тесты для Client.scala . Я получаю ошибку -

вызвано: TypeError: Невозможно вызвать метод "appendChild" со значением NULL.

Фрагмент клиента

@JSExport
object DashboardClient extends js.JSApp {
@JSExport
def main(): Unit = {
val dashboard = new Dashboard
dom.document.getElementById("bodyContent").appendChild(dashboard.bodyFrag.render)
}

Этот bodyFrag находится в другом классе

 def bodyFrag =
div(
  div(
    `class` := "row border-bottom",
    div(
      `class` := "col-md-12",
      div(
        `class` := "col-md-2 image-alignment",
        img(width := "161", src := "/assets/images/mountain.jpg")
      ),
      div(`class` := "col-md-10")
    )
  ),
  div(
    `class` := "row border-bottom",
    div(
      `class` := "col-md-12",
      div(
        `class` := "col-md-12",
        h1(`class` := "text-center", "Dashboard")
      )
    )
  )
)

Поэтому, когда я пытаюсь проверить, использует ли utest, я получаю вышеупомянутую ошибку. Пожалуйста помоги.

PS - Я совершенно новичок в Scala и ScalaJs.

1 ответ

Ну, ошибка, похоже, не имеет ничего общего с bodyFrag, (Или Play, или даже Scala.js, правда.) Ошибка буквально говорит, что getElementById("bodyContent") является нулем, что означает, что это еще не существует. Я предполагаю, что это объявлено в HTML.

Это обычная ловушка в коде браузера. Вам нужно подождать, пока DOM будет готов, прежде чем пытаться манипулировать им; Вы не показываете страницу HTML, поэтому я не уверен, что вы делаете это, но я подозреваю, что нет.

Существуют различные способы ожидания готовности DOM - общий (но более медленный) onload подход и подход jQuery обсуждаются в документации по jQuery. В качестве быстрого решения я бы порекомендовал заключить вызов в ваш код Scala.js внутри window.onload,

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