mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 14:14:55 +00:00
test(e2e): screenshot when assert err
This commit is contained in:
8
.github/workflows/clj-e2e.yml
vendored
8
.github/workflows/clj-e2e.yml
vendored
@@ -86,3 +86,11 @@ jobs:
|
||||
run: cd clj-e2e && bb dev
|
||||
env:
|
||||
DEBUG: "pw:api"
|
||||
|
||||
- name: Collect screenshots
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: e2e-screenshots
|
||||
path: e2e-dump/*
|
||||
retention-days: 1
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
(reset! config/*port 3001)
|
||||
;; show ui
|
||||
(reset! config/*headless false)
|
||||
(reset! config/*slow-mo 100)
|
||||
|
||||
(def *futures (atom {}))
|
||||
|
||||
@@ -46,6 +47,13 @@
|
||||
(->> (future (run-tests 'logseq.e2e.multi-tabs-test))
|
||||
(swap! *futures assoc :multi-tabs-test)))
|
||||
|
||||
(defn run-all-test
|
||||
[]
|
||||
(run-tests 'logseq.e2e.commands-test
|
||||
'logseq.e2e.multi-tabs-test
|
||||
'logseq.e2e.outliner-test
|
||||
'logseq.e2e.rtc-basic-test))
|
||||
|
||||
(comment
|
||||
|
||||
(future
|
||||
|
||||
40
clj-e2e/test/logseq/e2e/custom_report.clj
Normal file
40
clj-e2e/test/logseq/e2e/custom_report.clj
Normal file
@@ -0,0 +1,40 @@
|
||||
(ns logseq.e2e.custom-report
|
||||
(:require [clojure.stacktrace :as stack]
|
||||
[clojure.string :as string]
|
||||
[clojure.test :as t]
|
||||
[logseq.e2e.playwright-page :as pw-page])
|
||||
(:import (com.microsoft.playwright Page$ScreenshotOptions)))
|
||||
|
||||
(def ^:dynamic *pw-contexts*
|
||||
"Set of pw-contexts.
|
||||
record all playwright contexts in this dynamic var"
|
||||
nil)
|
||||
|
||||
(defn- screenshot
|
||||
[page test-name]
|
||||
(println :screenshot test-name)
|
||||
(.screenshot
|
||||
page
|
||||
(-> (Page$ScreenshotOptions.)
|
||||
(.setPath (java.nio.file.Paths/get "e2e-dump/"
|
||||
(into-array [(format "./screenshot-%s-%s.png" test-name (System/currentTimeMillis))]))))))
|
||||
|
||||
(defmethod t/report :error
|
||||
[m]
|
||||
;; copy from default impl
|
||||
(t/with-test-out
|
||||
(t/inc-report-counter :error)
|
||||
(println "\nERROR in" (t/testing-vars-str m))
|
||||
(when (seq t/*testing-contexts*) (println (t/testing-contexts-str)))
|
||||
(when-let [message (:message m)] (println message))
|
||||
(println "expected:" (pr-str (:expected m)))
|
||||
(print " actual: ")
|
||||
(let [actual (:actual m)]
|
||||
(if (instance? Throwable actual)
|
||||
(stack/print-cause-trace actual t/*stack-trace-depth*)
|
||||
(prn actual))))
|
||||
|
||||
;; screenshot for all pw pages when :error
|
||||
(when-let [all-contexts (seq *pw-contexts*)]
|
||||
(doseq [page (mapcat pw-page/get-pages all-contexts)]
|
||||
(screenshot page (string/join "-" (map (comp str :name meta) t/*testing-vars*))))))
|
||||
@@ -1,9 +1,8 @@
|
||||
(ns logseq.e2e.fixtures
|
||||
(:require [logseq.e2e.config :as config]
|
||||
[logseq.e2e.playwright-page :as pw-page]
|
||||
[logseq.e2e.util :as util]
|
||||
[wally.main :as w]
|
||||
[logseq.e2e.page :as page]))
|
||||
[logseq.e2e.custom-report :as custom-report]
|
||||
[logseq.e2e.page :as page]
|
||||
[wally.main :as w]))
|
||||
|
||||
;; TODO: save trace
|
||||
;; TODO: parallel support
|
||||
@@ -13,8 +12,9 @@
|
||||
(w/make-page {:headless (or headless @config/*headless)
|
||||
:persistent false
|
||||
:slow-mo @config/*slow-mo})
|
||||
(w/navigate (str "http://localhost:" (or port @config/*port)))
|
||||
(f)))
|
||||
(binding [custom-report/*pw-contexts* #{(.context (w/get-page))}]
|
||||
(w/navigate (str "http://localhost:" (or port @config/*port)))
|
||||
(f))))
|
||||
|
||||
(def *page1 (atom nil))
|
||||
(def *page2 (atom nil))
|
||||
@@ -29,15 +29,17 @@
|
||||
p1 (w/make-page page-opts)
|
||||
p2 (w/make-page page-opts)
|
||||
port' (or port @config/*port)]
|
||||
(run!
|
||||
#(w/with-page %
|
||||
(w/navigate (str "http://localhost:" port')))
|
||||
[p1 p2])
|
||||
|
||||
(reset! *page1 p1)
|
||||
(reset! *page2 p2)
|
||||
(binding [w/*page* (delay (throw (ex-info "Don't use *page*, use *page1* and *page2* instead" {})))]
|
||||
(binding [custom-report/*pw-contexts* (set [(.context @p1) (.context @p2)])
|
||||
w/*page* (delay (throw (ex-info "Don't use *page*, use *page1* and *page2* instead" {})))]
|
||||
(run!
|
||||
#(w/with-page %
|
||||
(w/navigate (str "http://localhost:" port')))
|
||||
[p1 p2])
|
||||
(f))
|
||||
|
||||
;; use with-page-open to release resources
|
||||
(w/with-page-open p1)
|
||||
(w/with-page-open p2)))
|
||||
|
||||
@@ -53,7 +55,8 @@
|
||||
;; context for p is no longer needed
|
||||
(.close (.context p))
|
||||
(w/with-page-open p) ; use with-page-open to close playwright instance
|
||||
(binding [*pw-ctx* ctx]
|
||||
(binding [custom-report/*pw-contexts* #{ctx}
|
||||
*pw-ctx* ctx]
|
||||
(f)
|
||||
(.close (.browser *pw-ctx*)))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user