Vocabulary
Key terms and concepts used in SolidX testing.
Testing Vocabulary
This page defines the core terms used throughout SolidX testing documentation.
Start Here
The testing vocabulary in SolidX becomes much easier to follow if you read it as a hierarchy instead of a flat list.
At a high level, the structure looks like this:
- A project is brought into SUT mode
- A module provides testing metadata
- That metadata defines test data, optional custom specs, and executable scenarios
- A scenario is made of steps
- Steps execute ops
- Ops run through adapters, the runtime context, and the resource store
In simplified form:
SUT
└── Module under test
└── testing metadata
├── data
├── specs
└── scenarios
└── steps
└── ops
├── api
├── ui
├── assert
├── util
└── testThat means the most useful reading order is usually:
- environment and execution terms,
- metadata structure terms,
- scenario and step terms,
- runtime and execution terms.
This is not redundant with the other testing pages, because this page is meant to help readers decode the words used across the rest of the section quickly.
Level 1: Environment And Execution Scope
System Under Test (SUT)
The specific SolidX application environment being prepared and exercised by the test workflow.
In practice, SUT mode usually means:
- isolated test datasources are active,
- metadata has been seeded,
- test fixtures have been loaded,
- and the app is ready for scenario execution.
Module Under Test
The module whose testing metadata is being loaded and executed, typically passed through:
npx @solidxai/solidctl@latest test run --module venueDatasource
A configured database connection used by the application.
The test workflow creates isolated test databases or schemas per datasource.
Run Name
A generated identifier used during test data --setup to distinguish one isolated testing run from another.
It helps name backups, manifests, and test datasources safely.
Manifest
The file written during test setup that records what was created so teardown can reverse it safely and deterministically.
Headless
A browser execution mode where UI tests run without showing a visible browser window.
This is common in CI runs.
Level 2: Metadata Structure
Testing Metadata
The testing section inside module metadata JSON files.
This metadata can define:
specsrolesusersdatascenarios
Read this as:
testingthe root testing block for a moduletesting.rolestest role definitions with permissionstesting.userstest user definitions with credentials and role assignmentstesting.datareusable fixtures loaded before executiontesting.specscustom spec registration entry pointstesting.scenariosexecutable scenario definitions
Scenario
An executable testing flow defined in metadata.
A scenario has:
- an
id, - an optional
name, - a
type, - optional
params, - optional
tags, - optional timeout and retry settings,
- and a list of
steps.
Scenario Type
The execution mode of a scenario.
Supported values are:
apiuimixed
Test Data
Fixture records defined in testing.data.
These are loaded into the test database before scenario execution and can also be referenced inside scenarios through interpolation.
In practice, test data often acts as a reusable fixture library for:
- master data such as states, cities, regions, or products
- relation-driven records expressed through
...UserKeyfields - upload fixtures where a field value points to
file:/absolute/path
Test Data Index
The in-memory indexed representation of testing.data built by the runner.
This is what powers ${data:...} lookups during scenario execution.
Spec
In the SolidX testing context, a spec usually means a custom executable testing unit registered for use through test.spec.
This is different from a scenario:
- a scenario is metadata-defined orchestration,
- a spec is custom code invoked from a scenario.
For example, the venue module registers venue.customHealth and then invokes it from a scenario through test.spec.
Testing Roles
Role definitions declared in testing.roles.
Each entry names a role and lists the permissions to bind to it. Permissions can be exact (ControllerName.methodName) or wildcard (ControllerName.*).
Roles are created by test data --load and are skipped if they already exist.
Testing Users
User definitions declared in testing.users.
Each entry provides credentials and an optional list of role names to assign.
Users are created by test data --load and are skipped if a user with the same username already exists.
Tag
A label attached to a scenario for filtering and grouping.
Tags make it easy to run only subsets such as:
smokeregressionauth
Level 3: Scenario Composition
Step
A single executable unit inside a scenario.
Steps can be written in:
- phase style using
given,when,then,and - or flat op style
Each step ultimately resolves to an operation handler.
Op
Short for operation.
This is the actual executable name of a step, for example:
api.requestui.gotoassert.equalsutil.sleeptest.spec
Read the hierarchy like this:
- a scenario contains steps
- a step names an op
- an op belongs to a family such as
api,ui,assert,util, ortest
Given / When / Then / And
BDD-style step phases used for readability.
These phases are normalised before execution — the engine treats all four identically.
Use given for preconditions, when for the action under test, then for assertions, and and to continue the previous phase without repeating it. The choice is a reading aid, not a rule.
saveAs
A step field that stores the result of the step into the resource store.
Example:
{
"when": {
"op": "api.auth.bearerFromLogin",
"with": { "url": "...", "username": "alice", "password": "secret" },
"saveAs": "auth.token"
}
}In real projects, this is often used to save the full authentication response, for example loginSuccess, and then later read the token from ${res:loginSuccess.bodyJson.data.accessToken}.
test.spec
A built-in step operation that executes a registered custom spec.
Use it when built-in operations are not expressive enough.
util.require
A built-in utility step used to fail fast when a required resource is missing from the resource store.
This is commonly used to make scenario prerequisites explicit, such as requiring loginSuccess before attempting authenticated API calls.
Level 4: Runtime And Execution
Adapter
A runtime integration layer that connects generic test steps to concrete tooling.
Examples:
- the API adapter executes HTTP requests
- the UI adapter uses Playwright for browser automation
Playwright Adapter
The UI testing adapter used by SolidX for browser-based E2E testing.
It powers navigation, actions, and assertions against the frontend.
Resource Store
A shared runtime store used to persist values across steps and scenarios.
Values are written using saveAs and later read using ${res:...} interpolation.
Typical stored values include:
- auth tokens,
- ids,
- response objects,
- custom spec results.
Interpolation
The process of resolving dynamic placeholders inside testing metadata before a step executes.
Common token families are:
${env:NAME}${params.foo}${res:path.to.value}${data:model["recordKey"].field}
Reporter
A component that receives lifecycle events from scenario execution and turns them into visible output.
The default reporter is a console reporter.
Runtime Context
The object shared across step execution.
It includes:
- scenario metadata,
- params,
- adapters,
- reporter,
- resource store,
- last API response,
- spec registry,
- indexed test data.
Last API Response
The most recent API response stored in the runtime context.
This is especially useful for assertions like assert.httpStatus.
Next: Authoring Scenarios