Skip to content

@mantaq/test

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");

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–100

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;
}

All throw on failure.

MethodWhat
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

Boolean checks, no throw.

MethodWhat
wasStateVisited(name)State entered?
wasTransitionVisited(from, event)Transition fired?
wasEffectRun(name)Effect ran?

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 };
}

TypeWhat
TestHarnessInstrumented actor with assertions and coverage
CoverageReportNumeric coverage with uncovered paths