如何调试 scala.js 单元测试?

问题描述 投票:0回答:2

我有一些用 utest 编写的 scala.js 单元测试。它们在 sbt 构建中都运行得很好,但是我希望能够在调试器中单步执行单元测试。使用我最喜欢的 IDE (intellij) 来调试测试将不起作用,因为它会尝试在 JVM 上运行它们。有没有某种方法可以逐步执行单元测试执行,类似于在 chrome 等浏览器中逐步执行(javascript)应用程序代码?

debugging intellij-idea scala.js utest
2个回答
11
投票

目前,据我所知,(逐步)调试 Scala.js 代码的唯一方法是在浏览器中。您可以在 sbt 中为测试生成 HTML 运行程序:

sbt> testHtmlFastOpt
// snip
[info] Wrote HTML test runner. Point your browser to .../test-suite-fastopt-test.html

这可以从 Scala.js 0.6.10 开始运行。


0
投票

是的,您可以通过将正确的环境标志传递给 JavaScript 环境

它可能看起来像这样:

lazy val jsEnvDebug = settingKey[Boolean]("Whether to debug the JS env.")

jsEnvDebug := sys.env.get("JSENV_DEBUG").contains("true")

Test / scalaJSLinkerConfig ~= {
  _.withModuleKind(ModuleKind.NoModule)
    .withModuleSplitStyle(ModuleSplitStyle.FewestModules)
}


Test / jsEnv := {
  val debugArgs = if ((Test / jsEnvDebug).value) List("--inspect-brk") else Nil
  new NodeJSEnv(
    NodeJSEnv
      .Config()
      .withArgs("--trace-warnings" :: debugArgs)
  )
}

然后你可以运行 sbt:

JSENV_DEBUG=true sbt

或者在现有的 sbt shell 中使用:

set Test/jsEnvDebug := true;test

这将启动 Node.js 并输出:

Debugger listening on ws://127.0.0.1:9229/822351a0-b519-4cfe-9e4b-f1e7121ecdc3
For help, see: https://nodejs.org/en/docs/inspector

然后您可以在 IntelliJ 中添加新的“附加到 Node.js/Chrome”运行配置。

如果您需要 DOM,请切换环境以使用 Node.js 和 jsdom

有时 IntelliJ 由于某种原因会出现断点问题。我发现启用“自动重新连接”会有所帮助,尽管这不是必需的。

缺点是我还没弄清楚如何让 IntelliJ 使用源映射,所以你必须将断点放在生成的 js 文件中,这很烦人,但总比没有好。

© www.soinside.com 2019 - 2024. All rights reserved.