effect-cycle-testing
v0.1.0
Published
Testing utilities for effect-cycle
Readme
effect-cycle-testing
Test doubles for effect-cycle drivers. Layer-swap your live drivers for these in tests — no mocking library required.
Install
pnpm add -D effect-cycle-testing effect-cycle-core effectWhat's in the box
TestDOMSource(events)— script DOM events per selector.TestDOMSink<Id, V>(tag)— capture rendered VNodes per renderer.TestHTTPSource(...)/TestHTTPSink(...)— script responses, capture requests.TestWSSource(messages)/TestWSSink()— script inbound, capture outbound.TestRouterSource(locations)/TestRouterSink()— script navigations, capture pushes/replaces.runTest(...)— convenience runner that pairsit.effectwithTestClock.
Usage
import { it } from "@effect/vitest"
import { Effect, Layer, Stream } from "effect"
import { DOMSource } from "effect-cycle-dom"
import { TestDOMSource } from "effect-cycle-testing"
it.effect("counts clicks", () =>
Effect.gen(function* () {
const dom = yield* DOMSource
const events = yield* Stream.runCollect(dom.select(".btn", "click"))
expect(events.length).toBe(2)
}).pipe(
Effect.provide(
TestDOMSource({ ".btn": [new Event("click"), new Event("click")] }),
),
),
)See the main README and DESIGN.md for the full design.
License
MIT © Josh Burgess
