@adobe/data-testing
v0.10.27
Published
Conformance-testing utilities (Match + Conformance runners) for @adobe/data ECS features
Maintainers
Keywords
Readme
@adobe/data-testing
Conformance-testing utilities for @adobe/data ECS features: the Match and
Conformance namespaces behind the spec ⇄ ECS conformance pattern (see
@adobe/data-ai's features/spec/index.md and features/ecs/conformance.md).
This package exists separately from @adobe/data so that installing
@adobe/data never pulls in a vitest peer dependency — only projects that
actually author conformance tests (and therefore already depend on vitest)
need it.
Install
pnpm add -D @adobe/data-testing vitestUsage
// spec/spec.ts — the pure spec: State, its actions and derivations, their cases
export const spec = Conformance.spec({
state: State,
fns: transforms,
schemas: { ...components, ...resources },
services: { analytics: AnalyticsService.createFake },
cases: { createTodo, toggleComplete, visibleTodos },
});
// spec/spec.test.ts
Conformance.checkSpec(spec);
// ecs/conformance/implementation.ts — the spec paired with its ECS build
export const implementation = Conformance.implementation(spec, {
plugin: MainService.plugin,
computedPlugin: ComputedDatabase.plugin,
projection,
hydrate: ["visibleTodos"],
});
// ecs/conformance/conformance.test.ts
Conformance.checkFeature(implementation);checkSpecruns every case against the pure spec functions. No ECS is built.checkFeatureruns every case against the ECS:- each spec action against the same-named action;
- each derivation against its computed;
- each ECS system against the same-named spec system function, running just that system;
- each frame case by running every modelled system once, in the order the systems'
schedules declare (theframeoption lists arg writers and unmodelled systems).
It also round-trips
State.samplesthrough the projection. A spec op with no implementation fails by name.Conformance.StateMatches<State, typeof resources, typeof components>pins aState's keys to the feature's resource and component names.Matchprovides tolerant, matcher-aware comparison (matches,ref,anyNumber,anyString).An action that reads ambient per-case context (a peer
userId) passes a testconcurrencyand aseedContexttoConformance.implementation.The lower-level runners (
runActions,runComputeds,runSystems,runTransactions,adaptCases) remain for custom harnesses.
