3 Testing
| (require datastar/testing) | package: datastar-lib |
Test SSE-producing handlers without opening a real HTTP connection. This module provides mock generators and parsed event values for assertions. Require it separately from datastar.
3.1 Generator Helpers
Create mock sse? values for unit tests and inspect emitted output.
procedure
(make-mock-sse) →
sse? (-> string?)
> (define-values (sse get-output) (make-mock-sse)) > (patch-elements/xexprs sse '(div ((id "x")) "hi")) > (get-output) "event: datastar-patch-elements\ndata: elements <div id=\"x\">hi</div>\n\n"
procedure
(make-recording-sse) →
sse? (-> (listof sse-event?))
The events are parsed from the same SSE text that would go over the wire, so they reflect exactly what a real client would receive, including serializer-side omission of default wire fields (for example mode 'outer, namespace 'html, useViewTransition false, onlyIfMissing false, and default retry).
> (define-values (sse2 get-events) (make-recording-sse)) > (patch-elements/xexprs sse2 '(div "test")) > (patch-signals sse2 (hash 'x 1)) > (define events (get-events)) > (length events) 2
> (sse-event-type (first events)) "datastar-patch-elements"
> (sse-event-type (second events)) "datastar-patch-signals"
3.2 Event Struct
Use sse-event values to assert exact wire-level SSE output in tests.
struct
(struct sse-event (type id retry data-lines) #:transparent) type : string? id : (or/c string? #f) retry : (or/c exact-nonnegative-integer? #f) data-lines : (listof string?)
type – event type string (e.g. "datastar-patch-elements").
id – event ID, or #f if none was set.
retry – retry duration in milliseconds, or #f if the default was used (default-equivalent retry is omitted by the serializer).
data-lines – list of data line contents without the data: prefix. For example, '("elements <div>hello</div>").