Reputation: 216
I'm trying to create a react-native app using slinky and am trying to run tests using the scala.js port of scalatest. Simple situation where the deps look like this in build.sbt
scalaVersion := "2.13.8"
libraryDependencies += "me.shadaj" %%% "slinky-native" % "0.7.0"
libraryDependencies += "me.shadaj" %%% "slinky-hot" % "0.7.0"
libraryDependencies += "org.scalatest" %%% "scalatest" % "3.2.13" % "test"
I've created some basic tests and am running sbt test
I get this error
[info] Fast optimizing /Users/arindamray/IdeaProjects/temp/DanceApp/target/scala-2.13/app-test-fastopt
/Users/arindamray/IdeaProjects/temp/DanceApp/node_modules/react-native/index.js:14
import typeof AccessibilityInfo from './Libraries/Components/AccessibilityInfo/AccessibilityInfo';
^^^^^^
SyntaxError: Cannot use import statement outside a module
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1033:15)
at Module._compile (node:internal/modules/cjs/loader:1069:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/Users/arindamray/IdeaProjects/temp/DanceApp/target/scala-2.13/app-test-fastopt/main.js:3:27)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
[error] org.scalajs.testing.common.RPCCore$ClosedException: org.scalajs.testing.adapter.JSEnvRPC$RunTerminatedException
[error] at org.scalajs.testing.common.RPCCore.helpClose(RPCCore.scala:223)
[error] at org.scalajs.testing.common.RPCCore.close(RPCCore.scala:215)
[error] at org.scalajs.testing.adapter.JSEnvRPC.close(JSEnvRPC.scala:68)
[error] at org.scalajs.testing.adapter.JSEnvRPC.$anonfun$new$1(JSEnvRPC.scala:59)
[error] at org.scalajs.testing.adapter.JSEnvRPC.$anonfun$new$1$adapted(JSEnvRPC.scala:59)
[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error] at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
[error] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
[error] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
[error] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
[error] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
[error] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
[error] Caused by: org.scalajs.testing.adapter.JSEnvRPC$RunTerminatedException
[error] at org.scalajs.testing.adapter.JSEnvRPC.$anonfun$new$1(JSEnvRPC.scala:59)
[error] at org.scalajs.testing.adapter.JSEnvRPC.$anonfun$new$1$adapted(JSEnvRPC.scala:59)
[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error] at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
[error] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
[error] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
[error] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
[error] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
[error] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
[error] Caused by: org.scalajs.jsenv.ExternalJSRun$NonZeroExitException: exited with code 1
[error] at org.scalajs.jsenv.ExternalJSRun$$anon$1.run(ExternalJSRun.scala:195)
What could I do to fix this? Any clues on how to debug this will be well appreciated.
I've uploaded code to reproduce this at https://github.com/ArindamRayMukherjee/ScalaJsTestError
Upvotes: 2
Views: 193
Reputation: 14842
You need to configure Node.js to load your linked code as ES Module (rather than CommonJS, which is the default).
See: https://www.scala-js.org/doc/project/module.html#:~:text=ES%20modules%20and%20Node.js
Specifically, either change the output file extension to .mjs
:
import org.scalajs.linker.interface.OutputPatterns
scalaJSLinkerConfig ~= {
// Use .mjs extension.
_.withOutputPatterns(OutputPatterns.fromJSFile("%s.mjs"))
}
Or add "type": "module"
to your package.json
(you'll need to add one if you don't have one).
Upvotes: 0