arinray
arinray

Reputation: 216

Testing using scalatest for Scala.js and Slinky

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

Answers (1)

gzm0
gzm0

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

Related Questions