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
,