This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2024-05-20
Channels
- # announcements (1)
- # aws (4)
- # babashka (9)
- # beginners (89)
- # biff (5)
- # cider (36)
- # clj-kondo (12)
- # cljfx (4)
- # clojure (65)
- # clojure-europe (11)
- # clojure-norway (16)
- # clojure-uk (4)
- # clojurescript (25)
- # clr (2)
- # community-development (2)
- # cursive (8)
- # datomic (9)
- # emacs (8)
- # fulcro (63)
- # holy-lambda (18)
- # hyperfiddle (32)
- # introduce-yourself (1)
- # lsp (1)
- # off-topic (9)
- # pedestal (6)
- # ring (10)
- # ring-swagger (3)
- # squint (26)
- # xtdb (3)
- # yamlscript (71)
Fra Emacs, er det noen som vet hvorfor (cider-test-run-project-tests nil)
tar nesten et sekund, mens (kaocha-runner-run-all-tests)
er nesten umiddelbar? Gjør ikke disse to samme ting?
(kaocha-runner er https://github.com/magnars/kaocha-runner.el)
kaocha-runner evaluerer testene i REPL-et ditt. Gjør den andre det? Eller sheller den ut/kjører en ny prosess på noe vis?
den kjører fra inni REPL --- det var derfor jeg tenkte at den burde være raskere enn den er.
Her er kilden til cider-test-run-project-tests
: https://github.com/clojure-emacs/cider/blob/b37a8d5023b30c2386c9baf6bedc8c6bb0b8f0ad/cider-test.el#L809-L815
cider-test-execute er et lite beist av en funksjon:
(defun cider-test-execute (ns &optional tests silent prompt-for-filters)
"Run tests for NS, which may be a keyword, optionally specifying TESTS.
This tests a single NS, or multiple namespaces when using keywords `:project',
`:loaded' or `:non-passing'. Optional TESTS are only honored when a single
namespace is specified. Upon test completion, results are echoed and a test
report is optionally displayed. When test failures/errors occur, their sources
are highlighted.
If SILENT is non-nil, suppress all messages other then test results.
If PROMPT-FOR-FILTERS is non-nil, prompt the user for a test selector filters.
The include/exclude selectors will be used to filter the tests before
running them."
(cider-test-clear-highlights)
(let ((include-selectors
(if prompt-for-filters
(cider-test--prompt-for-selectors
"Test selectors to include (space separated): ")
cider-test-default-include-selectors))
(exclude-selectors
(if prompt-for-filters
(cider-test--prompt-for-selectors
"Test selectors to exclude (space separated): ")
cider-test-default-exclude-selectors)))
(cider-map-repls :clj-strict
(lambda (conn)
(unless silent
(if (and tests (= (length tests) 1))
;; we generate a different message when running individual tests
(cider-test-echo-running ns (car tests))
(cider-test-echo-running ns)))
(setq cider-test--current-repl conn)
(let* ((retest? (eq :non-passing ns))
(request `("op" ,(cond ((stringp ns) "test")
((eq :project ns) "test-all")
((eq :loaded ns) "test-all")
(retest? "retest")))))
;; we add optional parts of the request only when relevant
(when (and (listp include-selectors) include-selectors)
(setq request (append request `("include" ,include-selectors))))
(when (and (listp exclude-selectors) exclude-selectors)
(setq request (append request `("exclude" ,exclude-selectors))))
(when (stringp ns)
(setq request (append request `("ns" ,ns))))
(when (stringp ns)
(setq request (append request `("tests" ,tests))))
(when (or (stringp ns) (eq :project ns))
(setq request (append request `("load?" ,"true"))))
(when (and cider-test-fail-fast
(not retest?))
(setq request (append request `("fail-fast" ,"true"))))
(cider-nrepl-send-request
request
(lambda (response)
(nrepl-dbind-response response (summary results status out err elapsed-time ns-elapsed-time var-elapsed-time)
(cond ((member "namespace-not-found" status)
(unless silent
(message "No test namespace: %s" (cider-propertize ns 'ns))))
(out (cider-emit-interactive-eval-output out))
(err (cider-emit-interactive-eval-err-output err))
(results
(nrepl-dbind-response summary (error fail)
(setq cider-test-last-summary summary)
(setq cider-test-last-results results)
(cider-test-highlight-problems results)
(cider-test-echo-summary summary results elapsed-time)
(if (or (not (zerop (+ error fail)))
cider-test-show-report-on-success)
(let ((b (cider-popup-buffer
cider-test-report-buffer
cider-auto-select-test-report-buffer)))
(with-current-buffer b
;; Change the default-directory so that it doesn't affect `sesman--linked-sessions` logic:
(setq-local default-directory
(with-current-buffer "*Messages*" default-directory)))
(cider-test-render-report
b
summary
results
elapsed-time
ns-elapsed-time
var-elapsed-time))
(when (get-buffer cider-test-report-buffer)
(with-current-buffer cider-test-report-buffer
(let ((inhibit-read-only t))
(erase-buffer)))
(cider-test-render-report
cider-test-report-buffer
summary
results
elapsed-time
ns-elapsed-time))))))))
conn))))))
Oi, M-x cider-test-run-project-tests
på min PC ser ut til å kjøre tester via kaocha-runner
også. (se etter lysegrønn tekst først, den ser ut som kaocha-runner output, deretter kommer mørkegrønn fra cider).
Snodig.
Da er det noe du har satt opp. kaocha-runner i seg selv er bare en samling funksjoner du kaller ved behov og ønske.
For å være tydelig: jeg som bruker synes at dette er rar oppførsel fra CIDER, og forventet oppførsel fra kaocha-test-runner. Når jeg kjører testene med kaocha-runner-run-all-tests, skjer jo det jeg forventer. Med CIDER får jeg ikke det jeg hadde trodd. Fra kilden til kaocha-runner-run-all-tests ser det jo ikke ut som det skjer noe rart.
Jeg spurte i #cider: https://clojurians.slack.com/archives/C0617A8PQ/p1716213346286849
Ja, ser ut som at maskineriet til cider-nrepl-request ikke fungerer helt som jeg forventet, men at forskjellige requests faktisk blør over i hverandre. Lurer på om det kan forklare andre rariteter jeg har opplevd. Usikker på hvordan jeg skal kunne fikse det fra "user space", da. :thinking_face:
Eg har skrive ein artikkel om korleis Datomic handterar nettverksfeil: https://ivarref.github.io/posts/network-failures/

Spennende lesing! Og grattis med ny nettside, hvis jeg gjetter rett i at den er ny!
Takk for det @U3X7174KS! Ja, det er ei ny side ja 🙂