org.scalajs.jsenv.ExternalJSEnv$NonZeroExitException:PhantomJS2 已退出,代码为 2

org.scalajs.jsenv.ExternalJSEnv$NonZeroExitException: PhantomJS2 exited with code 2

我使用 scalatest 作为我的测试框架,这是我的测试代码:

import org.scalatest.FunSuite

class SampleTest extends FunSuite{

   test("hello") {
     println(s"sdfsf")
   }
}

build.sbt 设置

  val scalatestJS = libraryDependencies += "org.scalatest" %%% "scalatest" % Version.scalatest % Test

  val scalatestJSSettings = Seq(
    scalatestJS,
    scalaJSStage in Global := FastOptStage,
    //    scalaJSStage in Global := FullOptStage,
//    jsDependencies += RuntimeDOM,
//    jsDependencies += ProvidedJS / "test-bundle.js" % Test,
    jsEnv in Test := new PhantomJS2Env(scalaJSPhantomJSClassLoader.value, addArgs = Seq("--web-security=no"))
//        jsEnv in Test := new NodeJSEnv()
  )

调试出来:

[debug] Scala compilation took 0.961938628 s
[debug] Invalidating client/SampleTest.scala...
[debug] Invalidating (transitively) by inheritance from client/SampleTest.scala...
[debug] Initial set of included nodes: Set(client/SampleTest.scala)
[debug] Invalidated by transitive inheritance dependency: Set(client/SampleTest.scala)
[debug] The client/SampleTest.scala source file has the following implicit definitions changed:
[debug]         unconstrainedEquality, convertToEqualizer.
[debug] All member reference dependencies will be considered within this context.
[debug] New invalidations:
[debug]         Set()
[debug] Initial set of included nodes: Set()
[debug] Previously invalidated, but (transitively) depend on new invalidations:
[debug]         Set()
[debug] All newly invalidated sources after taking into account (previously) recompiled sources:Set()
[debug] Copy resource mappings: 
[debug]         
[info] Fast optimizing client/assets/client-test-fastopt.js
[debug] Linker: Compute reachability: 710892 us
[debug] Linker: Assemble LinkedClasses: 445560 us
[debug] Basic Linking: 1168893 us
[debug] Inc. optimizer: Batch mode: true
[debug] Inc. optimizer: Incremental part: 127681 us
[debug] Inc. optimizer: Optimizing 11793 methods.
[debug] Inc. optimizer: Optimizer part: 5987357 us
[debug] Inc. optimizer: 6140114 us
[debug] Refiner: Compute reachability: 243271 us
[debug] Refiner: Assemble LinkedClasses: 27389 us
[debug] Refiner: 272567 us
[debug] Emitter: Class tree cache stats: reused: 0 -- invalidated: 1375
[debug] Emitter: Method tree cache stats: resued: 0 -- invalidated: 6643
[debug] Emitter (write output): 1353125 us
[debug] Global IR cache stats: reused: 0 -- invalidated: 130 -- trees read: 1748
[debug] Loading JSEnv with linked file client/assets/client-test-fastopt.js
org.scalajs.jsenv.ExternalJSEnv$NonZeroExitException: PhantomJS2 exited with code 2
        at org.scalajs.jsenv.ExternalJSEnv$AbstractExtRunner.waitForVM(ExternalJSEnv.scala:107)
        at org.scalajs.jsenv.ExternalJSEnv$ExtRunner.run(ExternalJSEnv.scala:156)
        at org.scalajs.sbtplugin.FrameworkDetector.detect(FrameworkDetector.scala:66)
        at org.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun.apply(ScalaJSPluginInternal.scala:737)
        at org.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun.apply(ScalaJSPluginInternal.scala:720)
        at scala.Function1$$anonfun$compose.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$$anonfun.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[error] (client/test:loadedTestFrameworks) org.scalajs.jsenv.ExternalJSEnv$NonZeroExitException: PhantomJS2 exited with code 2
[error] Total time: 15 s, completed May 20, 2016 12:20:29 AM

注意:这曾经很好用,但现在不行了:s

编辑:

Scala 测试:3.0.0-M15

ScalaJS:0.6.9

斯卡拉:2.11.8

幻影JS:2.0.0

在我的代码中,我有一个 class 扩展了 js class

@ScalaJSDefined
class MyLab(container : dom.Node) extends JSLab(container) {... }

尽管我没有在我的测试中使用这个 class,看起来为这一行生成的源代码是如何在全球范围内寻找 JSLab 的!这会导致 phantomjs 崩溃。有趣的是,测试在 Rhino 上执行得很好 :s。无论如何,我将 JSLab 添加为测试依赖项并且错误消失了。

我不知道该怪谁,无论是愚蠢的开发人员(我)在解决问题时走向了不同的方向,还是 scala.js 对 phantomjs 崩溃的原因没有帮助:s