使用Play框架的ScalaJs(测试中的错误)

时间:2016-04-05 17:13:56

标签: scala scala.js utest playscalajs

我正在尝试使用Play Framework 2.5的ScalaJs交叉构建项目。 当我尝试运行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时,我得到了上面提到的错误。 请帮忙。

P.S - 我对Scala和ScalaJs来说是全新的。

1 个答案:

答案 0 :(得分:2)

嗯,该错误似乎与bodyFrag无关。 (或者Play,甚至是Scala.js,真的。)错误实际上是说getElementById("bodyContent")为空,这意味着它还没有存在。我认为它是在HTML中声明的。

这是浏览器代码中的常见陷阱。在尝试操作之前,您需要等待DOM准备好;你没有显示HTML页面,所以我不确定你是否这样做,但我怀疑不是。

有各种方法可以等待DOM准备好 - 常见(但速度较慢)onload方法和jQuery方法,已经讨论过in the jQuery documentation。作为快速修复,我建议将调用包装到window.onload内的Scala.js代码中。

相关问题