Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
iofficeai avatar

Testing

  • 37 installs
  • 31.4k repo stars
  • Updated August 5, 2026
  • iofficeai/aionui

Follow the AionUi testing workflow to write and update tests, ensuring coverage before committing or claiming work complete.

About

Defines the testing workflow and quality standards for the AionUi project, requiring tests for every feature and updates to existing tests when logic changes. A developer uses it when writing new tests, adding a feature, or before claiming work complete.

  • Every feature must include tests; existing tests must be updated when logic changes
  • Test coverage required before claiming work complete or committing

Testing by the numbers

  • 37 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #1,303 of 2,153 Testing & QA skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/iofficeai/aionui --skill testing

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs37
repo stars31.4k
Last updatedAugust 5, 2026
Repositoryiofficeai/aionui

What it does

Follow the AionUi testing workflow to write and update tests, ensuring coverage before committing or claiming work complete.

Files

SKILL.mdMarkdownGitHub ↗

Testing Skill

Standards and workflow for writing and running tests. Every feature must be tested.

Announce at start: "I'm using testing skill to ensure proper test coverage."

Trigger Conditions

  • Writing new tests for a feature or bug fix
  • Adding a new feature (must include tests)
  • Modifying logic that has existing tests (must update them)
  • Before claiming work is complete
  • Before committing code

Framework

Vitest 4 — configured in vitest.config.ts.

Test Structure

tests/
├── unit/          # Individual functions, utilities, components
├── integration/   # IPC, database, service interactions
├── regression/    # Regression test cases
└── e2e/           # End-to-end tests (Playwright, playwright.config.ts)

Two Test Environments

EnvironmentWhenFile naming
node (default)Main process, utilities, services*.test.ts
jsdomDOM/browser-dependent code*.dom.test.ts

Workflow

Step 1: Identify What to Test

Before writing tests, list the riskiest scenarios first:

  • What happens when the dependency returns undefined / throws?
  • What happens at boundaries (empty list, max retries, past timestamp)?
  • What is most likely to break in production?

Step 2: Write Tests

Follow these quality rules:

1. Describe behavior, not code structure

// Wrong — describes implementation
it('should call repo.getConversation', ...)

// Correct — describes behavior
it('should return cached task without hitting repo on second call', ...)
it('should reject with error when conversation does not exist', ...)

2. Every describe block must cover at least one failure path

Happy-path-only tests leave the most dangerous code untested.

3. One behavior per test

Keep each it() focused. More than 3 expect() calls in one test is a signal it is testing too much at once.

4. Self-check

After writing a test, mentally delete the core logic it targets. If the test would still pass, rewrite it — it is not guarding anything.

5. Start from risk, not from coverage gaps

List scenarios most likely to produce bugs. Write those first. Coverage is the outcome, not the starting point.

Step 3: Run Tests

bun run test              # Run all tests (REQUIRED before every commit)
bun run test:coverage     # Check coverage (before opening a PR)

Step 4: Verify Coverage

Coverage target: ≥ 80% for all source files matched by vitest.config.tscoverage.include (currently src/**/*.{ts,tsx} plus a few scripts).

New source files are automatically included in coverage — no manual config changes needed. If a new file is accidentally excluded by a rule in coverage.exclude, remove it from the exclude list.

Step 5: Update Existing Tests

When modifying logic, check if existing tests need updating:

bun run test -- --reporter=verbose   # See which tests pass/fail with names

If a test fails because the behavior changed intentionally, update the test. If it fails unexpectedly, investigate.

Edge Case Checklist

When testing a module, verify:

  • [ ] null / undefined inputs handled
  • [ ] Empty arrays/objects handled
  • [ ] Error thrown by dependencies handled
  • [ ] Boundary values (0, -1, max, empty string)
  • [ ] Async operations (timeout, rejection, cancellation)

Quick Checklist

Before submitting code:

  • [ ] New features have corresponding test cases
  • [ ] Modified logic has updated tests
  • [ ] bun run test passes
  • [ ] Tests describe behavior, not implementation
  • [ ] At least one failure path per describe block
  • [ ] New source files are not accidentally excluded by coverage.exclude
  • [ ] bun run test:coverage meets ≥ 80% target

Common Mistakes

MistakeCorrect
Testing implementation detailsTest observable behavior
Only testing happy pathMust include at least one failure path
5+ expects in one it()Split into separate tests
Skipping tests for "simple" codeSimple code breaks too — test the risky parts
Writing tests after saying "done"Tests are part of "done", not an afterthought

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.