Uses AI + iOS or Android emulators / web browsers to create automated test suites using simple instructions
Find a file
Zach Handley b60e88ca04
All checks were successful
CI / typecheck (push) Successful in 15s
CI / trigger-publish (push) Has been skipped
CI / Cleanup Old Caches (push) Successful in 6s
CI / lint (push) Successful in 27s
CI / build (push) Successful in 19s
CI / integration-test (push) Successful in 12s
CI / test (push) Successful in 25s
v0.2.22 Somehow missed the waitForSelector workflowExecutor
2026-01-06 10:41:47 -08:00
.forgejo/workflows v0.2.0 fixed publish 2026-01-05 10:44:59 -08:00
examples Mostly done 2026-01-01 12:30:08 -08:00
packages v0.1.0 2026-01-02 14:54:48 -08:00
schemas v0.2.12 2026-01-05 13:11:19 -08:00
scripts v0.2.12 2026-01-05 13:11:19 -08:00
src v0.2.22 Somehow missed the waitForSelector workflowExecutor 2026-01-06 10:41:47 -08:00
tests v0.1.11 2026-01-02 15:32:34 -08:00
.dockerignore Mostly done 2026-01-01 12:30:08 -08:00
.gitignore initial 2025-12-18 16:24:44 -08:00
.prettierignore initial 2025-12-18 16:24:44 -08:00
.prettierrc initial 2025-12-18 16:24:44 -08:00
action.yml another action update, pref built in zod toJsonSchema 2026-01-05 13:09:45 -08:00
APPWRITE_TESTING.md initial 2025-12-18 16:24:44 -08:00
docker-entrypoint.sh Mostly done 2026-01-01 12:30:08 -08:00
Dockerfile Mostly done 2026-01-01 12:30:08 -08:00
eslint.config.cjs initial 2025-12-18 16:24:44 -08:00
HANDOFF.md remove browserless 2026-01-01 14:10:27 -08:00
INTERPOLATION_IMPLEMENTATION.md Mostly done 2026-01-01 12:30:08 -08:00
package.json v0.2.20 Add randomEmail, Phone, Photo, fillerText 2026-01-05 18:40:22 -08:00
pnpm-lock.yaml v0.2.20 Add randomEmail, Phone, Photo, fillerText 2026-01-05 18:40:22 -08:00
pnpm-workspace.yaml initial 2025-12-18 16:24:44 -08:00
PROJECT_DONE.md initial 2025-12-18 16:24:44 -08:00
PROJECT_README.md initial 2025-12-18 16:24:44 -08:00
PROJECT_TODO.md initial 2025-12-18 16:24:44 -08:00
README.md v0.1.0 2026-01-02 14:54:48 -08:00
tsconfig.json initial 2025-12-18 16:24:44 -08:00
tsconfig.test.json initial 2025-12-18 16:24:44 -08:00
tsup.config.ts v0.1.0 2026-01-02 14:54:48 -08:00
vitest.config.ts remove browserless 2026-01-01 14:10:27 -08:00
vitest.integration.config.ts v0.1.12 2026-01-02 15:35:56 -08:00

IntelliTester

Uses AI + iOS or Android emulators / web browsers to create automated test suites using simple instructions

Prerequisites

Before running web tests with IntelliTester, you need to install Playwright browsers:

npx playwright install chromium
# Or for all browsers:
npx playwright install

Editor Configuration

IntelliTester provides JSON schemas for YAML configuration files to enable autocomplete and validation in VS Code and other editors.

VS Code Setup

Add this to your .vscode/settings.json (or workspace settings):

{
  "yaml.schemas": {
    "./node_modules/intellitester/schemas/intellitester.config.schema.json": "intellitester.config.yaml",
    "./node_modules/intellitester/schemas/test.schema.json": "*.test.yaml",
    "./node_modules/intellitester/schemas/workflow.schema.json": "*.workflow.yaml"
  }
}

This enables:

  • Auto-completion for all configuration properties
  • Inline documentation and examples
  • Real-time validation and error checking
  • Type checking for action steps and configurations

Using Local Development Schemas

If you're working on IntelliTester itself or want to use local schemas, use these paths instead:

{
  "yaml.schemas": {
    "./schemas/intellitester.config.schema.json": "intellitester.config.yaml",
    "./schemas/test.schema.json": "*.test.yaml",
    "./schemas/workflow.schema.json": "*.workflow.yaml"
  }
}

Debugging

IntelliTester provides powerful debugging capabilities to help troubleshoot failing tests.

Debug Mode

Run tests with the --debug flag to pause execution on failure and open the Playwright Inspector:

# Run with debug mode - pauses on failure
intellitester run tests/login.test.yaml --headed --debug

Debug Action Type

Add breakpoints directly in your test files using the debug action type. This pauses execution and opens the Playwright Inspector at that specific step:

# Add breakpoints in your test
steps:
  - type: navigate
    value: /signup
  - type: debug  # Pauses here, opens Playwright Inspector
  - type: input
    target: { testId: email }
    value: test@example.com

When execution pauses, you can:

  • Inspect the current page state
  • Step through actions manually
  • Examine selectors and elements
  • Continue execution when ready

Resource Cleanup

IntelliTester automatically tracks resources created during tests and cleans them up after execution. This ensures tests don't leave behind database rows, files, users, or other artifacts.

Built-in Providers

IntelliTester includes cleanup providers for common backends:

  • Appwrite - Delete rows, files, teams, users, memberships
  • PostgreSQL - Delete rows and users
  • MySQL - Delete rows and users
  • SQLite - Delete rows and users

Configuration

Configure cleanup in your test YAML files or global config:

# Using Appwrite (backwards compatible)
appwrite:
  endpoint: https://cloud.appwrite.io/v1
  projectId: ${APPWRITE_PROJECT_ID}
  apiKey: ${APPWRITE_API_KEY}
  cleanup: true
  cleanupOnFailure: true

# Or using the new cleanup config
cleanup:
  provider: appwrite
  parallel: false      # Sequential cleanup by default
  retries: 3           # Retry failed deletions

  # Provider-specific configuration
  appwrite:
    endpoint: ${APPWRITE_ENDPOINT}
    projectId: ${APPWRITE_PROJECT_ID}
    apiKey: ${APPWRITE_API_KEY}

  # Map resource types to cleanup methods
  types:
    row: appwrite.deleteRow
    team: appwrite.deleteTeam
    stripe_customer: stripe.deleteCustomer

  # Explicit handler files to load
  handlers:
    - ./src/cleanup/stripe.ts

  # Auto-discover handlers (enabled by default)
  discover:
    enabled: true
    paths:
      - ./tests/cleanup
    pattern: "**/*.ts"

Custom Cleanup Handlers

Create custom handlers for resources not covered by built-in providers:

// intellitester.cleanup.ts (auto-discovered at project root)
import { defineCleanupHandlers } from 'intellitester/cleanup';
import Stripe from 'stripe';

export default defineCleanupHandlers({
  stripe_customer: async (resource) => {
    const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
    await stripe.customers.del(resource.id);
  },

  stripe_subscription: async (resource) => {
    const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
    await stripe.subscriptions.cancel(resource.id);
  },
});

Handlers are loaded in this order (later definitions override earlier ones):

  1. Built-in provider methods (e.g., appwrite.deleteRow)
  2. intellitester.cleanup.ts at project root
  3. Files in discovery paths (default: tests/cleanup/**/*.ts)
  4. Explicit handler files from config

Tracking Resources

In your app's server-side code, track resources for cleanup:

import { track } from 'intellitester/integration';

// Track a database row
await track({
  type: 'row',
  id: row.$id,
  databaseId: 'main',
  tableId: 'users',
});

// Track a team
await track({
  type: 'team',
  id: team.$id,
});

// Track a custom resource (requires custom handler)
await track({
  type: 'stripe_customer',
  id: customer.id,
});

The track() function is production-safe - it's a no-op if the required environment variables aren't set. IntelliTester sets these automatically during test execution.