使用ScalaJS Bundler运行测试时面临ReferenceError

问题描述

sbt-scalajs 0.6.x 升级 1.2.0 时,我遇到了这个问题,问题是:-

借助sbt-scalajs v0.6.26(和sbt-scalajs-bundler v0.14.0),我启用了对测试的jsdom支持

requireJsDomEnv in Test := true

测试套件运行正常。

但是使用sbt-scalajs v1.2.0(和sbt-scalajs-bundler v0.18.0),我也启用了对测试的jsdom支持

requireJsDomEnv in Test := true

但这给了我以下错误

[info] Writing and bundling the test loader
webpack:///./node_modules/@opentelemetry/api/build/src/platform/browser/globalThis.js?:21
exports._globalThis = typeof globalThis === 'object' ? globalThis : window;
                                                                    ^
ReferenceError: window is not defined
    at eval (webpack:///./node_modules/@opentelemetry/api/build/src/platform/browser/globalThis.js?:21:69)
    at Object../node_modules/@opentelemetry/api/build/src/platform/browser/globalThis.js

但是,当我删除requireJsDomEnv in Test := true设置时,测试套件可以正常运行。我需要了解为什么会这样吗?以及我该如何解决

我正在使用:

scala -> 2.13.3
Java -> OpenJDK 14.0.2

解决方法

从代码中看,您似乎正在将node-js env与JSm一起使用。

因此要启用构建,您必须使用 JSDOMNodeJSEnv()例如:-

requireJsDomEnv in Test := true
jsEnv in Test := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv()

请参阅文档以获取更多信息:-https://www.scala-js.org/doc/project/js-environments.html

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...