@mantaq/test
createTestHarness(actor)
Section titled “createTestHarness(actor)”function createTestHarness<C>(actor: AnyActor<C>): TestHarness<C>;Instruments actor for testing. Builds state graph, wraps send to record history.
const harness = createTestHarness(checkout);harness.send(submitBasicInfo.create());harness.assertStateVisited("shippingAddress");computeCoverage(graph, history)
Section titled “computeCoverage(graph, history)”function computeCoverage(graph: ActorGraph, history: History): CoverageReport;Compares graph against history. Returns state, transition, and effect coverage as totals, visited counts, and uncovered paths. Used internally by harness.coverage().
const report = computeCoverage(graph, history);report.percent.states; // 0–100TestHarness
Section titled “TestHarness”interface TestHarness<C> { actor: AnyActor<C>; graph: ActorGraph; history: History;
send(event: { type: string; payload?: unknown }): void; state: AnyActor["state"]; snapshot(): Snapshot<C>; context: C | undefined;
assertAllStatesVisited(): void; assertAllTransitionsVisited(): void; assertStateVisited(stateName: string): void; assertStateNeverVisited(stateName: string): void; assertTransitionVisited(from: string, event: string): void; assertTransitionNeverVisited(from: string, event: string): void; assertContextNever(predicate: (context: unknown) => boolean): void; assertEffectRan(stateName: string): void; assertEffectNeverRan(stateName: string): void;
wasStateVisited(stateName: string): boolean; wasTransitionVisited(from: string, event: string): boolean; wasEffectRun(stateName: string): boolean;
coverage(): CoverageReport; reset(): void;}Assert methods
Section titled “Assert methods”All throw on failure.
| Method | What |
|---|---|
assertAllStatesVisited() | Every graph node (non-__initial__) was hit |
assertAllTransitionsVisited() | Every graph edge (non-internal, non-undetermined) hit |
assertStateVisited(name) | Named state was entered at least once |
assertStateNeverVisited(name) | Named state was never entered |
assertTransitionVisited(from, event) | (from, event) pair fired |
assertTransitionNeverVisited(from, event) | Pair never fired |
assertContextNever(fn) | Predicate does not match current context |
assertEffectRan(name) | Effect for named state ran |
assertEffectNeverRan(name) | Effect for named state never ran |
Query methods
Section titled “Query methods”Boolean checks, no throw.
| Method | What |
|---|---|
wasStateVisited(name) | State entered? |
wasTransitionVisited(from, event) | Transition fired? |
wasEffectRun(name) | Effect ran? |
CoverageReport
Section titled “CoverageReport”interface CoverageReport { states: { total: number; visited: number; uncovered: string[] }; transitions: { total: number; visited: number; uncovered: Array<{ from: string; event: string }>; }; effects: { total: number; ran: number; unexecuted: string[] }; percent: { states: number; transitions: number; effects: number };}| Type | What |
|---|---|
TestHarness | Instrumented actor with assertions and coverage |
CoverageReport | Numeric coverage with uncovered paths |