feat: add repl support for cljs test (#13754)
This commit is contained in:
parent
71211ee7b9
commit
a08c7ff22e
|
@ -70,17 +70,20 @@
|
||||||
;; produced by the target :mocks below and redefines node require
|
;; produced by the target :mocks below and redefines node require
|
||||||
;; function to use the mocks instead of the rn libraries
|
;; function to use the mocks instead of the rn libraries
|
||||||
:test
|
:test
|
||||||
{:output-to "target/test/test.js"
|
{:output-to "target/test/test.js"
|
||||||
:output-dir "target/test"
|
:output-dir "target/test"
|
||||||
:optimizations :simple
|
:optimizations :simple
|
||||||
:target :node-test
|
:target :node-test
|
||||||
:closure-defines {status-im.utils.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN"}
|
:main status-im.test-runner/main
|
||||||
|
;; set :ui-driven to true to let shadow-cljs inject node-repl
|
||||||
|
:ui-driven true
|
||||||
|
:closure-defines {status-im.utils.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN"}
|
||||||
:compiler-options {;; needed because we override require and it
|
:compiler-options {;; needed because we override require and it
|
||||||
;; messes with source-map which reports callstack
|
;; messes with source-map which reports callstack
|
||||||
;; exceeded exceptions instead of real issues
|
;; exceeded exceptions instead of real issues
|
||||||
:source-map false
|
:source-map false
|
||||||
;; needed because we use deref in tests
|
;; needed because we use deref in tests
|
||||||
:static-fns false
|
:static-fns false
|
||||||
:optimizations :simple}}
|
:optimizations :simple}}
|
||||||
|
|
||||||
;; mock.js-dependencies is mocking the react-native libraries
|
;; mock.js-dependencies is mocking the react-native libraries
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
(ns status-im.integration-test
|
(ns status-im.integration-test
|
||||||
(:require [day8.re-frame.test :as rf-test]
|
(:require [cljs.test :refer [deftest is run-tests]]
|
||||||
status-im.events
|
[day8.re-frame.test :as rf-test]
|
||||||
[re-frame.core :as rf]
|
[re-frame.core :as rf]
|
||||||
|
status-im.events
|
||||||
[status-im.transport.core :as transport]
|
[status-im.transport.core :as transport]
|
||||||
[cljs.test :refer [deftest is]]
|
|
||||||
[status-im.utils.test :as utils.test]))
|
[status-im.utils.test :as utils.test]))
|
||||||
|
|
||||||
(def password "testabc")
|
(def password "testabc")
|
||||||
|
@ -56,3 +56,6 @@
|
||||||
(rf-test/wait-for ; wait for login
|
(rf-test/wait-for ; wait for login
|
||||||
[::transport/messenger-started]
|
[::transport/messenger-started]
|
||||||
(assert-messenger-started))))))
|
(assert-messenger-started))))))
|
||||||
|
|
||||||
|
(comment
|
||||||
|
(run-tests))
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
(ns status-im.test-runner
|
||||||
|
{:dev/always true}
|
||||||
|
(:require
|
||||||
|
[cljs.test :as ct]
|
||||||
|
[clojure.string :as str]
|
||||||
|
[shadow.test :as st]
|
||||||
|
[shadow.test.env :as env]))
|
||||||
|
|
||||||
|
(defonce repl? (atom false))
|
||||||
|
|
||||||
|
(defmethod ct/report [::ct/default :end-run-tests] [m]
|
||||||
|
(when-not @repl?
|
||||||
|
(if (ct/successful? m)
|
||||||
|
(js/process.exit 0)
|
||||||
|
(js/process.exit 1))))
|
||||||
|
|
||||||
|
;; get-test-data is a macro so this namespace REQUIRES :dev/always hint ns so that it is always recompiled
|
||||||
|
(defn ^:dev/after-load reset-test-data! []
|
||||||
|
(-> (env/get-test-data)
|
||||||
|
(env/reset-test-data!)))
|
||||||
|
|
||||||
|
(defn parse-args [args]
|
||||||
|
(reduce
|
||||||
|
(fn [opts arg]
|
||||||
|
(cond
|
||||||
|
(= "--help" arg)
|
||||||
|
(assoc opts :help true)
|
||||||
|
|
||||||
|
(= "--list" arg)
|
||||||
|
(assoc opts :list true)
|
||||||
|
|
||||||
|
(= "--repl" arg)
|
||||||
|
(assoc opts :repl true)
|
||||||
|
|
||||||
|
(str/starts-with? arg "--test=")
|
||||||
|
(let [test-arg (subs arg 7)
|
||||||
|
test-syms
|
||||||
|
(->> (str/split test-arg ",")
|
||||||
|
(map symbol))]
|
||||||
|
(update opts :test-syms into test-syms))
|
||||||
|
|
||||||
|
:else
|
||||||
|
(do (println (str "Unknown arg: " arg))
|
||||||
|
opts)))
|
||||||
|
{:test-syms []}
|
||||||
|
args))
|
||||||
|
|
||||||
|
(defn find-matching-test-vars [test-syms]
|
||||||
|
;; FIXME: should have some kind of wildcard support
|
||||||
|
(let [test-namespaces
|
||||||
|
(->> test-syms (filter simple-symbol?) (set))
|
||||||
|
test-var-syms
|
||||||
|
(->> test-syms (filter qualified-symbol?) (set))]
|
||||||
|
|
||||||
|
(->> (env/get-test-vars)
|
||||||
|
(filter (fn [the-var]
|
||||||
|
(let [{:keys [name ns]} (meta the-var)]
|
||||||
|
(or (contains? test-namespaces ns)
|
||||||
|
(contains? test-var-syms (symbol ns name)))))))))
|
||||||
|
|
||||||
|
(defn execute-cli [{:keys [test-syms help list repl] :as _opts}]
|
||||||
|
(let [test-env
|
||||||
|
(-> (ct/empty-env)
|
||||||
|
;; can't think of a proper way to let CLI specify custom reporter?
|
||||||
|
;; :report-fn is mostly for UI purposes, CLI should be fine with default report
|
||||||
|
#_(assoc :report-fn
|
||||||
|
(fn [m]
|
||||||
|
(tap> [:test m (ct/get-current-env)])
|
||||||
|
(prn m))))]
|
||||||
|
|
||||||
|
(cond
|
||||||
|
help
|
||||||
|
(do (println "Usage:")
|
||||||
|
(println " --list (list known test names)")
|
||||||
|
(println " --test=<ns-to-test>,<fqn-symbol-to-test> (run test for namespace or single var, separated by comma)")
|
||||||
|
(println " --repl (start node without automatically running tests)"))
|
||||||
|
|
||||||
|
list
|
||||||
|
(doseq [[ns ns-info]
|
||||||
|
(->> (env/get-tests)
|
||||||
|
(sort-by first))]
|
||||||
|
(println "Namespace:" ns)
|
||||||
|
(doseq [var (:vars ns-info)
|
||||||
|
:let [m (meta var)]]
|
||||||
|
(println (str " " (:ns m) "/" (:name m))))
|
||||||
|
(println "---------------------------------"))
|
||||||
|
|
||||||
|
repl
|
||||||
|
(do
|
||||||
|
(reset! repl? true)
|
||||||
|
(js/process.on "SIGINT" #(js/process.exit 0)))
|
||||||
|
|
||||||
|
(seq test-syms)
|
||||||
|
(let [test-vars (find-matching-test-vars test-syms)]
|
||||||
|
(st/run-test-vars test-env test-vars))
|
||||||
|
|
||||||
|
:else
|
||||||
|
(st/run-all-tests test-env nil))))
|
||||||
|
|
||||||
|
(defn ^:export main [& args]
|
||||||
|
(reset-test-data!)
|
||||||
|
|
||||||
|
(let [opts (parse-args args)]
|
||||||
|
(execute-cli opts)))
|
Loading…
Reference in New Issue