Skip to main content
On this pageFunctions

Test

Functions

message

functionsource
/** Sends a Message through update. Commands stay pending until resolve or resolveAll. */
<Message>(message_: NoInfer<Message>): (simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>

resolveAll

functionsource
/** Resolves all listed Commands with their result Messages. Handles cascading resolution. */
(pairs: readonly Array<ResolverPair<string, unknown>>): (simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>

tap

functionsource
/** Runs a function for side effects (e.g. assertions) without breaking the pipe chain. */
<Model, Message, OutMessage = undefined>(f: (simulation: Simulation<Model, Message, OutMessage>) => void): (simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>

with

functionsource
<Model>(model: Model): WithStep<Model>

Types

AnyCommand

typesource
/** A Command in a test simulation, identified by name. */
type AnyCommand = Readonly<{
  name: string
}>

ResolverPair

typesource
/** A Command definition paired with the result Message to resolve it with. */
type ResolverPair = readonly [CommandDefinition<Name, ResultMessage>, ResultMessage]

Simulation

typesource
/** An immutable test simulation of a Foldkit program. */
type Simulation = Readonly<{
  commands: ReadonlyArray<AnyCommand>
  message: Message | undefined
  model: Model
  outMessage: OutMessage
}>

StoryStep

typesource
/** A single step in a test story — either a WithStep or a simulation transform. */
type StoryStep = WithStep<NoInfer<Model>> | (simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>

WithStep

typesource
/** A callable step that sets the initial Model. Carries phantom type for compile-time validation. */
type WithStep = Readonly<{
  _phantomModel: Model
}> & (simulation: Simulation<M, Message, OutMessage>) => Simulation<M, Message, OutMessage>

Constants

resolve

constsource
/** Resolves a specific pending Command with the given result Message. */
const resolve: (definition: CommandDefinition<Name, ResultMessage>, resultMessage: ResultMessage) => (simulation: Simulation<Model, Message, OutMessage>) => Simulation<Model, Message, OutMessage>

story

constsource
/** Executes a test story. Throws if any Commands remain unresolved. */
const story: (updateFn: (model: Model, message: Message) => readonly [
  Model,
  readonly Array<Readonly<{
    name: string
  }>>,
  OutMessage
], steps: readonly Array<StoryStep<Model, Message, OutMessage>>) => void

Stay in the update loop.

New releases, patterns, and the occasional deep dive.


Built with Foldkit.

© 2026 Devin Jameson