lambdaisland / kaocha-cljs

ClojureScript support for Kaocha
Eclipse Public License 1.0
40 stars 10 forks source link

[ClojureScript Exception/Execution error (ReferenceError)] window is not defined #46

Closed WillForan closed 2 years ago

WillForan commented 2 years ago

locally and within github actions, I get an error re: undefined window.

I suspect this is related to the known issues around linux and an open browser window. But I at least have the browser window open. I think I'm missing something obvious, but have come up empty so far.

The github action is the easiest to point to. It runs chrome in the background and clojure -A:test -M -m kaocha.runner via make test

          export DISPLAY=:0
          Xvfb -ac :0 &
          npm install ws
          chrome --no-first-run &
          make test # JVM will take longer to load than chrome

https://github.com/LabNeuroCogDevel/choice-landscape/blob/master/.github/workflows/test-cljs.yaml https://github.com/LabNeuroCogDevel/choice-landscape/blob/master/Makefile https://github.com/LabNeuroCogDevel/choice-landscape/blob/master/tests.edn

chrome was at least running at some point, the CI log mentions killing it during clean up

Cleaning up orphan processes Terminate orphan process: pid (1717) (Xvfb) Terminate orphan process: pid (1731) (chrome)


locally I get the same error

clojure -A:test -M -m kaocha.runner --no-capture-output

[(E]
Randomized with --seed 159045765

ERROR in unit-cljs (main.java:40)
Unexpected error executing kaocha-cljs test suite.
Exception: clojure.lang.ExceptionInfo: ClojureScript Exception
{:via [{:type clojure.lang.ExceptionInfo, :message "Execution error (ReferenceError) at (<cljs repl>:1).\nwindow is not defined\n", :data {:type :js-eval-exception, :error {:status :exception, :value "Execution error (ReferenceError) at (<cljs repl>:1).\nwindow is not defined\n"}, :repl-env #cljs.repl.node.NodeEnv{:host "localhost", :port 56711, :path nil, :socket #object[clojure.lang.Atom 0x12f3fa0a {:status :ready, :val {:socket #object[java.net.Socket 0xcba01e2 "Socket[addr=localhost/127.0.0.1,port=56711,localport=54822]"], :in #object[java.io.BufferedReader 0x615524a "java.io.BufferedReader@615524a"], :out #object[java.io.BufferedWriter 0x3a75a52a "java.io.BufferedWriter@3a75a52a"]}}], :proc #object[clojure.lang.Atom 0xacd4d73 {:status :ready, :val #object[java.lang.ProcessImpl 0x2199147f "Process[pid=739569, exitValue=137]"]}], :state #object[clojure.lang.Atom 0x74ba0ad8 {:status :ready, :val {:listeners 0}}], :debug-port nil}, :form (require (quote landscape.view-test)), :js "goog.require('landscape.view_test');\n'nil';\n"}, :at [cljs.repl$evaluate_form invokeStatic "repl.cljc" 578]}], :trace [[cljs.repl$evaluate_form invokeStatic "repl.cljc" 578] [cljs.repl$evaluate_form invoke "repl.cljc" 499] [cljs.repl$eval_cljs invokeStatic "repl.cljc" 693] [cljs.repl$eval_cljs invoke "repl.cljc" 686] [kaocha.cljs.queue_eval_loop$start_BANG_$fn__4663$fn__4668 invoke "queue_eval_loop.clj" 78] [kaocha.cljs.queue_eval_loop$start_BANG_$fn__4663 invoke "queue_eval_loop.clj" 69] [cljs.compiler$with_core_cljs invokeStatic "compiler.cljc" 1435] [cljs.compiler$with_core_cljs invoke "compiler.cljc" 1424] [kaocha.cljs.queue_eval_loop$start_BANG_ invokeStatic "queue_eval_loop.clj" 55] [kaocha.cljs.queue_eval_loop$start_BANG_ doInvoke "queue_eval_loop.clj" 40] [clojure.lang.RestFn invoke "RestFn.java" 470] [kaocha.cljs.prepl$prepl$fn__4684$fn__4685 invoke "prepl.clj" 14] [kaocha.cljs.prepl$prepl$fn__4684 invoke "prepl.clj" 13] [clojure.core$binding_conveyor_fn$fn__5823 invoke "core.clj" 2047] [clojure.lang.AFn call "AFn.java" 18] [java.util.concurrent.FutureTask run "FutureTask.java" 264] [java.util.concurrent.ThreadPoolExecutor runWorker "ThreadPoolExecutor.java" 1130] [java.util.concurrent.ThreadPoolExecutor$Worker run "ThreadPoolExecutor.java" 630] [java.lang.Thread run "Thread.java" 831]], :cause "Execution error (ReferenceError) at (<cljs repl>:1).\nwindow is not defined\n", :data {:type :js-eval-exception, :error {:status :exception, :value "Execution error (ReferenceError) at (<cljs repl>:1).\nwindow is not defined\n"}, :repl-env #cljs.repl.node.NodeEnv{:host "localhost", :port 56711, :path nil, :socket #object[clojure.lang.Atom 0x12f3fa0a {:status :ready, :val {:socket #object[java.net.Socket 0xcba01e2 "Socket[addr=localhost/127.0.0.1,port=56711,localport=54822]"], :in #object[java.io.BufferedReader 0x615524a "java.io.BufferedReader@615524a"], :out #object[java.io.BufferedWriter 0x3a75a52a "java.io.BufferedWriter@3a75a52a"]}}], :proc #object[clojure.lang.Atom 0xacd4d73 {:status :ready, :val #object[java.lang.ProcessImpl 0x2199147f "Process[pid=739569, exitValue=137]"]}], :state #object[clojure.lang.Atom 0x74ba0ad8 {:status :ready, :val {:listeners 0}}], :debug-port nil}, :form (require (quote landscape.view-test)), :js "goog.require('landscape.view_test');\n'nil';\n"}}
 at kaocha.type.cljs$fn__7641.invokeStatic (cljs.clj:152)
    kaocha.type.cljs/fn (cljs.clj:150)
    kaocha.type.cljs$queue_consumer.invokeStatic (cljs.clj:197)
    kaocha.type.cljs$queue_consumer.invoke (cljs.clj:182)
    kaocha.type.cljs$eval7737$fn__7739.invoke (cljs.clj:359)
    ...
plexus commented 2 years ago

You're testing via a node repl, the js constant "window" does not exist in node. Make sure you're using a browser-repl in your tests.edn

WillForan commented 2 years ago

Ah! Thanks! Added :cljs/repl-env cljs.repl.browser/repl-env and got passed the error ... now onto debugging Kaocha ClojureScript client failed connecting back.