or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

build.mdcode-quality.mddocumentation.mdindex.mdmonorepo.mdrelease.mdtesting.mdutilities.md
tile.json

testing.mddocs/

Testing Framework

Aegir's testing framework provides multi-environment test execution supporting Node.js, browsers, WebWorkers, Electron, and React Native with coverage reporting and watch mode capabilities.

Capabilities

Test Command

Main test command that runs tests across different target environments.

aegir test [options]

Options:
  --build, -b           Build project before running tests (default: false)
  --types               Build TypeScript declarations (default: true)
  --target, -t          Target environment(s) (array)
                        Choices: node, browser, webworker, electron-main, 
                                electron-renderer, react-native-android, 
                                react-native-ios
  --watch, -w           Watch files for changes and rerun tests (default: false)
  --files, -f           Custom globs for test files (array)
  --timeout             Default timeout per test in milliseconds (default: 5000)
  --grep, -g            Limit tests matching pattern (string)
  --bail                Bail on first test failure (default: false)
  --progress            Use progress reporters (default: true)
  --cov                 Enable coverage reporting (default: false)
  --covTimeout          Coverage collection timeout (default: 10000)

Test Configuration

Testing behavior can be configured via .aegir.js or package.json:

interface TestOptions {
  /** Build project before running tests */
  build: boolean;
  /** Target environments for test execution */
  target: Array<'node' | 'browser' | 'webworker' | 'electron-main' | 'electron-renderer' | 'react-native-android' | 'react-native-ios'>;
  /** Watch mode for continuous testing */
  watch: boolean;
  /** Custom test file patterns */
  files: string[];
  /** Default test timeout in milliseconds */
  timeout: number;
  /** Test name pattern matching */
  grep: string;
  /** Stop on first failure */
  bail: boolean;
  /** Enable progress reporting */
  progress: boolean;
  /** Enable coverage collection */
  cov: boolean;
  /** Coverage collection timeout */
  covTimeout: number;
  /** Test runner environment */
  runner: 'node' | 'browser' | 'webworker' | 'electron-main' | 'electron-renderer' | 'react-native-android' | 'react-native-ios';
  /** Browser-specific configuration */
  browser: {
    config: unknown; // playwright-test config
  };
  /** Pre-test setup hook */
  before(options: GlobalOptions & TestOptions): Promise<TestBeforeResult | void>;
  /** Post-test cleanup hook */
  after(options: GlobalOptions & TestOptions, beforeResult: TestBeforeResult | void): Promise<void>;
}

interface TestBeforeResult {
  env?: NodeJS.ProcessEnv;
}

Usage Examples:

// .aegir.js configuration
module.exports = {
  test: {
    target: ['node', 'browser'],
    timeout: 10000,
    files: ['test/**/*.spec.js'],
    cov: true,
    before: async (options) => {
      // Setup test environment
      return { env: { TEST_MODE: 'aegir' } };
    },
    after: async (options, beforeResult) => {
      // Cleanup after tests
    }
  }
};

Node.js Testing

Runs tests in Node.js environment using Mocha.

# Node.js testing
aegir test --target node

# With coverage
aegir test --target node --cov

# Watch mode
aegir test --target node --watch

Features:

  • Mocha test runner
  • Code coverage via c8/nyc
  • ES modules support
  • TypeScript support
  • Source map support

Browser Testing

Runs tests in browser environments using Playwright.

# Browser testing (default: Chromium)
aegir test --target browser

# Specific browser
aegir test --target browser -- --browser firefox
aegir test --target browser -- --browser webkit

# Debug mode
aegir test --target browser -- --debug

Features:

  • Playwright test runner
  • Chromium, Firefox, WebKit support
  • Headless and headed modes
  • ES modules in browser
  • Coverage collection
  • Debug mode with persistent windows

WebWorker Testing

Runs tests inside Web Workers for isolated JavaScript execution.

# WebWorker testing
aegir test --target webworker

# With specific browser
aegir test --target webworker -- --browser firefox

Features:

  • Isolated worker environment
  • Same browser support as regular browser tests
  • Module import support
  • Limited API surface (no DOM)

Electron Testing

Runs tests in Electron main and renderer processes.

# Electron main process
aegir test --target electron-main

# Electron renderer process
aegir test --target electron-renderer

# Interactive debug mode
aegir test --target electron-renderer -- --interactive

Features:

  • Full Node.js API in main process
  • Browser-like environment in renderer
  • Native module access
  • Debug mode with persistent windows

React Native Testing

Runs tests on React Native Android and iOS platforms.

# React Native Android
aegir test --target react-native-android

# React Native iOS
aegir test --target react-native-ios

Features:

  • Platform-specific testing
  • React Native API access
  • Device/simulator execution
  • Platform-specific capabilities

Multi-Environment Testing

Run tests across multiple environments simultaneously.

# Multiple targets
aegir test --target node --target browser

# All environments
aegir test --target node --target browser --target webworker

Test File Organization

Aegir follows specific conventions for test file organization:

test/
├── *.spec.js         # Universal tests (run in all environments)
├── *.spec.ts         # TypeScript universal tests
├── node.js           # Node.js specific test loader
├── browser.js        # Browser specific test loader
├── fixtures/         # Test fixture files
└── helpers/          # Test helper utilities

Coverage Reporting

Code coverage collection and reporting across environments.

# Enable coverage
aegir test --cov

# Coverage with custom timeout
aegir test --cov --covTimeout 15000

# Generate coverage reports
aegir test --cov && npx nyc report
aegir test --cov && npx c8 report

Coverage features:

  • Istanbul format output
  • Multiple reporter support
  • Cross-environment coverage merging
  • Codecov integration ready
  • Source map support

Test Hooks

Configure setup and teardown hooks for test environments.

// .aegir.js hooks
module.exports = {
  test: {
    async before(options) {
      // Setup databases, servers, etc.
      const server = await startTestServer();
      return { env: { TEST_SERVER_URL: server.url } };
    },
    async after(options, beforeResult) {
      // Cleanup resources
      if (beforeResult?.env?.TEST_SERVER_URL) {
        await stopTestServer();
      }
    }
  }
};

Option Forwarding

Forward options to underlying test runners using --.

# Forward to Mocha (Node.js)
aegir test --target node -- --reporter json

# Forward to Playwright
aegir test --target browser -- --browser firefox --debug

# Forward via npm scripts
npm test -- -- --browser webkit

Watch Mode

Continuous testing with file change detection.

# Watch mode
aegir test --watch

# Watch specific targets
aegir test --target browser --watch

# Watch with debug
aegir test --target browser --watch -- --debug

Features:

  • File change detection
  • Automatic test re-execution
  • Configurable file patterns
  • Cross-environment watching