Skip to content

Test debt: add missing a11y tests, prop-coverage utility, and behavioral tests #63

Description

@IgorShevchik

Background

Surfaced during the multi-angle review of the nuxt/ui → b24ui sync plan (.sync/PLAN.md). These are pre-existing test-suite gaps, independent of the sync pipeline, so they are split out here. They also matter for the pipeline: the planned sync relies on the test suite to catch incomplete ports, so closing these strengthens that safety net.

Scope

1. Missing accessibility (axe) tests

The component test suite uses vitest-axe (it('passes accessibility tests')) for ~92 of ~98 component specs. The following components have no axe case:

  • Advice
  • Countdown
  • ProsePrompt
  • ScrollArea
  • TableWrapper
  • Theme

(Advice/Countdown are b24ui-specific and won't be synced from upstream, but the a11y gap is still worth closing.)

Action: add an axe case to each of the six specs.

2. Prop-coverage utility

There is currently no check that every prop of a component is exercised by a renderEach snapshot case. This is the main blind spot the sync pipeline is exposed to: a prop can exist in the types (so typecheck passes) without being rendered/implemented, and no snapshot changes.

Action: add a small utility/test that, for a given component, compares the declared props against the keys exercised in its spec's renderEach cases and reports uncovered props. Wire it into CI for changed components.

3. Behavioral tests for interaction-heavy components

~25% of components have behavioral tests (events/keyboard/focus); the rest are snapshot-only. Snapshots don't catch behavior regressions (e.g. keyboard navigation, focus trap).

Action (initial set):

  • Accordion — keyboard navigation
  • Select / SelectMenu — selection events, filtering
  • Modal — focus trap / dismiss behavior

Priority

  • §1 a11y — P2 (small, mechanical)
  • §2 prop-coverage — P2 (high leverage for the sync pipeline)
  • §3 behavioral — P3 (incremental)

Reference

  • Review context: .sync/PLAN.md "Quality requirements for every ported PR"

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions