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.
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)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
}
}
};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 --watchFeatures:
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 -- --debugFeatures:
Runs tests inside Web Workers for isolated JavaScript execution.
# WebWorker testing
aegir test --target webworker
# With specific browser
aegir test --target webworker -- --browser firefoxFeatures:
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 -- --interactiveFeatures:
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-iosFeatures:
Run tests across multiple environments simultaneously.
# Multiple targets
aegir test --target node --target browser
# All environments
aegir test --target node --target browser --target webworkerAegir 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 utilitiesCode 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 reportCoverage features:
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();
}
}
}
};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 webkitContinuous 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 -- --debugFeatures: