| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- (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))))
|