@everystate/test
v1.0.6
Published
EveryState Test: Testing library with TDD-style assertions and event-sequence tracking
Maintainers
Readme
@everystate/test v1.0.5
Testing library for EveryState with TDD-style assertions
Zero-dependency testing library for EveryState. Assert on state changes, event sequences, and types.
Installation
npm install @everystate/test @everystate/coreQuick Start
import { createEventTest, runTests } from '@everystate/test';
const results = runTests({
'counter increments': () => {
const t = createEventTest({ count: 0 });
t.trigger('count', 1);
t.assertPath('count', 1);
t.trigger('count', 2);
t.assertPath('count', 2);
},
'type assertions': () => {
const t = createEventTest({ name: 'Alice', age: 30 });
t.assertType('name', 'string');
t.assertType('age', 'number');
},
});
if (results.failed > 0) process.exit(1);API
createEventTest(initialState)- Create a test instance with an EveryState store.trigger(path, value)- Set a value at a path.assertPath(path, expected)- Assert exact value at a path.assertType(path, type)- Assert type of value at a path.assertShape(path, shape)- Assert object shape at a path.assertArrayOf(path, elementShape)- Assert array with element shape.assertArrayLength(path, length)- Assert array length.assertEventFired(path, times)- Assert event fired N times.getEventLog()- Get the full event log.getTypeAssertions()- Get recorded type assertions
test(name, fn)- Run a single test, returns true/falserunTests(tests)- Run a map of tests, returns{ passed, failed }
Features
- Zero dependencies - No external test framework needed
- TDD-style assertions - assertPath, assertType, assertShape, etc.
- Event sequence testing - Track order of state changes
- Type extraction - Infer types from state for type generation
- Fast - 100 tests in ~0.5ms
Documentation
Full documentation available at everystate.dev.
Ecosystem
| Package | Description | License |
|---|---|---|
| @everystate/aliases | Ergonomic single-character and short-name DOM aliases for vanilla JS | MIT |
| @everystate/angular | Angular adapter: usePath, useIntent, useWildcard, useAsync — bridges store to Angular signals | MIT |
| @everystate/core | Path-based state management with wildcard subscriptions and async support | MIT |
| @everystate/css | Reactive CSSOM engine: design tokens, typed validation, WCAG enforcement, all via path-based state | MIT |
| @everystate/examples | Example applications and patterns | MIT |
| @everystate/perf | Performance monitoring overlay | MIT |
| @everystate/react | React hooks adapter: usePath, useIntent, useAsync hooks and EventStateProvider | MIT |
| @everystate/renderer | Direct-binding reactive renderer: bind-*, set, each attributes. Zero build step | MIT |
| @everystate/router | SPA routing as state | MIT |
| @everystate/solid | Solid adapter: usePath, useIntent, useWildcard, useAsync — bridges store to Solid signals | MIT |
| @everystate/test | Event-sequence testing for EveryState stores. Zero dependency. | MIT |
| @everystate/types | Typed dot-path autocomplete for EveryState stores | MIT |
| @everystate/view | State-driven view: DOMless resolve + surgical DOM projector. View tree as first-class state | MIT |
| @everystate/vue | Vue 3 composables adapter: provideStore, usePath, useIntent, useWildcard, useAsync | MIT |
Self-test (CLI, opt-in)
The self-test verifies the exported API surface (createEventTest, test, runTests)
and exercises the test runner itself. It does not require @everystate/core -
it only checks that functions exist with the right types and arities, and that
test() and runTests() produce correct pass/fail results.
It is opt-in and never runs automatically on install:
# via npx (no install needed)
npx everystate-test-self-test
# if installed locally
everystate-test-self-test
# or directly
node node_modules/@everystate/test/self-test.jsYou can also run the npm script from the package folder:
npm --prefix node_modules/@everystate/test run self-testLicense
MIT (c) Ajdin Imsirovic
