"Referring to non-existent method org.scalatest.Matchers.convertToAnyShouldWrapper" 将 scalatest 升级到 3.1.4 之后

"Referring to non-existent method org.scalatest.Matchers.convertToAnyShouldWrapper" after upgrading scalatest to 3.1.4

我有 scala 和 scalajs 项目,它在 github 中以供参考。

最初我有 scalatest 版本 3.0.3 和 scalacheck 版本 1.13.5。命令 sbt clean test 工作正常。

我已将 scalatest 版本更新到 3.1.4 和 scalacheck 版本 1.14.3。

在此更新后的 scala 项目测试工作正常但 scalajs 测试不是。

我得到的错误是

[info] Fast optimizing /Users/rajkumar.natarajan/Documents/Coding/misc/sjs-test-error/core/js/target/scala-2.12/reftree-test-fastopt.js

[error] Referring to non-existent method org.scalatestplus.scalacheck.ScalaCheckConfiguration.$$init$()scala.Unit

[error] called from generic.RefTreeSpec.()

[error] called from generic.RefTreeSpec.()

[error] called from core module analyzer

[error] Referring to non-existent method org.scalatestplus.scalacheck.ScalaCheckDrivenPropertyChecks.$$init$()scala.Unit

[error] called from generic.RefTreeSpec.()

[error] called from generic.RefTreeSpec.()

[error] called from core module analyzer

[error] There were linking errors

[error] (coreJS / Test / fastOptJS) There were linking errors

[error] Total time: 31 s, completed Jun 9, 2021, 5:54:57 PM

变化在这commit

我想弄清楚,但我是 scalajs 的新手。我需要做些什么才能正常工作吗?

在你的 diff 中,在 https://github.com/rajcspsg/sjs-test-error/commit/bb3f00cc542b29998af271530dccae9b73f2ad00#diff-5634c415cd8c8504fdb973a3ed092300b43c4b8fc1e184f7249eb29a55511f91R33,你依赖于

"org.scalatestplus" %% "scalacheck-1-14" % "3.1.3.0" % Test

使用 %%。这是对 JVM 工件的依赖,它带来了它自己的依赖的 JVM 版本。您最终在类路径中得到了两个版本的 ScalaTest:一个用于 JVM,一个用于 JS。不幸的是,用于 JVM 的那个被选中,因此遮蔽了用于 JS 的那个。这会导致您收到链接错误。

您可以通过在该依赖项中使用 %%% 而不是 %% 来解决此问题,假设该库可用于 Scala.js。如果不是,您将不得不找到一种根本不需要这种依赖性的方法。