srs_test.cljs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. (ns srs-test
  2. (:require [clojure.test :as t :refer [deftest is async use-fixtures]]
  3. ["playwright$default" :refer [chromium]]
  4. [clojure.string :as str]
  5. [promesa.core :as p]))
  6. ;; TODO: Setup helpers and an electron test using fixture.fs for examples
  7. ;; See https://github.com/babashka/nbb#what-does-default-mean for syntax
  8. ;; https://shadow-cljs.github.io/docs/UsersGuide.html#_using_npm_packages may also
  9. ;; help but be warned we aren't using shadow-cljs here
  10. ;; Move to test-helper when this works for electron
  11. (def browser (atom nil))
  12. (def headless (boolean (.-CI js/process.env)))
  13. (defn launch-browser []
  14. (p/->> (.launch chromium #js {:headless headless})
  15. (reset! browser)))
  16. (def close-browser true)
  17. ;; Tests
  18. (use-fixtures :once
  19. {:before
  20. (fn []
  21. (async done
  22. (->
  23. (launch-browser)
  24. (.catch js/console.log)
  25. (.finally done))))
  26. :after
  27. (fn []
  28. (async done
  29. (if close-browser
  30. (p/do
  31. (.close @browser)
  32. (done))
  33. (done))))})
  34. ;; Example test copied from https://github.com/babashka/nbb/blob/main/examples/playwright/example.cljs
  35. (deftest example-test
  36. (async
  37. done
  38. (-> (p/let [page (.newPage @browser)
  39. _ (.goto page "https://clojure.org" #js{:waitUntil "networkidle"})
  40. _ (-> (.screenshot page #js{:path "screenshot.png"})
  41. (.catch #(js/console.log %)))
  42. content (.content page)
  43. ;; uncomment to save content to variable for inspection
  44. ;; _ (def c content)
  45. ;; uncomment to pause execution to inspect state in browser
  46. ;; _ (pause)
  47. ]
  48. (is (str/includes? content "clojure")))
  49. (.catch (fn [err]
  50. (js/console.log err)
  51. (is false)))
  52. (.finally done))))