mirror of https://github.com/logseq/logseq
Basic example using browser with test ns and test runner cleanly split
parent
acb3a7bd61
commit
56b58566be
|
@ -0,0 +1 @@
|
|||
yarn.lock
|
|
@ -0,0 +1,22 @@
|
|||
## Description
|
||||
|
||||
This demonstrates running playwright tests with https://github.com/babashka/nbb.
|
||||
|
||||
_Note_: This only runs example browser tests. There is more work to run a basic electron test
|
||||
|
||||
## Setup
|
||||
Install dependencies: `yarn install`
|
||||
|
||||
## Usage
|
||||
|
||||
Run tests: `yarn nbb -m test-runner`
|
||||
|
||||
Run headless tests: `CI=1 yarn nbb -m test-runner`
|
||||
|
||||
`nbb` supports repl driven development. See `yarn nbb -h` for different ways to
|
||||
start a repl. See links below for examples of repl usage.
|
||||
|
||||
|
||||
## Links
|
||||
* https://github.com/nextjournal/clerk/pull/97/files
|
||||
* https://github.com/babashka/nbb/tree/main/examples/playwright
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"playwright": "^1.19.2",
|
||||
"nbb": "^0.2.9"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
(ns srs-test
|
||||
(:require [clojure.test :as t :refer [deftest is async use-fixtures]]
|
||||
["playwright$default" :refer [chromium]]
|
||||
[clojure.string :as str]
|
||||
[promesa.core :as p]))
|
||||
|
||||
;; TODO: Setup helpers and an electron test using fixture.fs for examples
|
||||
;; See https://github.com/babashka/nbb#what-does-default-mean for syntax
|
||||
;; https://shadow-cljs.github.io/docs/UsersGuide.html#_using_npm_packages may also
|
||||
;; help but be warned we aren't using shadow-cljs here
|
||||
|
||||
;; Move to test-helper when this works for electron
|
||||
(def browser (atom nil))
|
||||
(def headless (boolean (.-CI js/process.env)))
|
||||
(defn launch-browser []
|
||||
(p/->> (.launch chromium #js {:headless headless})
|
||||
(reset! browser)))
|
||||
(def close-browser true)
|
||||
|
||||
;; Tests
|
||||
(use-fixtures :once
|
||||
{:before
|
||||
(fn []
|
||||
(async done
|
||||
(->
|
||||
(launch-browser)
|
||||
(.catch js/console.log)
|
||||
(.finally done))))
|
||||
:after
|
||||
(fn []
|
||||
(async done
|
||||
(if close-browser
|
||||
(p/do
|
||||
(.close @browser)
|
||||
(done))
|
||||
(done))))})
|
||||
|
||||
;; Example test copied from https://github.com/babashka/nbb/blob/main/examples/playwright/example.cljs
|
||||
(deftest example-test
|
||||
(async
|
||||
done
|
||||
(-> (p/let [page (.newPage @browser)
|
||||
_ (.goto page "https://clojure.org" #js{:waitUntil "networkidle"})
|
||||
_ (-> (.screenshot page #js{:path "screenshot.png"})
|
||||
(.catch #(js/console.log %)))
|
||||
content (.content page)
|
||||
;; uncomment to save content to variable for inspection
|
||||
;; _ (def c content)
|
||||
;; uncomment to pause execution to inspect state in browser
|
||||
;; _ (pause)
|
||||
]
|
||||
(is (str/includes? content "clojure")))
|
||||
(.catch (fn [err]
|
||||
(js/console.log err)
|
||||
(is false)))
|
||||
(.finally done))))
|
|
@ -0,0 +1,30 @@
|
|||
(ns test-runner
|
||||
"Originally copied from https://github.com/nextjournal/clerk/blob/6a7690caf436b3e5eb210ea06fb31bb9f7ba3387/ui_tests/playwright_tests.cljs"
|
||||
{:clj-kondo/config '{:skip-comments false}}
|
||||
(:require [clojure.test :as t]
|
||||
[srs-test]))
|
||||
|
||||
(defmethod t/report [:cljs.test/default :begin-test-var] [m]
|
||||
(println "===" (-> m :var meta :name))
|
||||
(println))
|
||||
|
||||
(defn print-summary []
|
||||
(t/report (assoc (:report-counters (t/get-current-env)) :type :summary)))
|
||||
|
||||
(defmethod t/report [:cljs.test/default :end-test-vars] [_]
|
||||
(let [env (t/get-current-env)
|
||||
counters (:report-counters env)
|
||||
failures (:fail counters)
|
||||
errors (:error counters)]
|
||||
(when (or (pos? failures)
|
||||
(pos? errors))
|
||||
(set! (.-exitCode js/process) 1))
|
||||
(print-summary)))
|
||||
|
||||
(defn get-test-vars [nss]
|
||||
(->> (ns-publics nss)
|
||||
vals
|
||||
(filter (comp :test meta))))
|
||||
|
||||
(defn -main [& _args]
|
||||
(t/test-vars (get-test-vars 'srs-test)))
|
Loading…
Reference in New Issue