Skip to main content

testing

Use when writing tests, debugging test failures, running the test suite, or setting up test infrastructure. Covers self-test, package tests, and modern E2E tests.

Source facts

Repository
meteor/meteor
Last source activity
September 4, 2026 at 13:43
Detected SKILL.md language
English
Stars
44,794
Forks
5,257

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
testing
description
Use when writing tests, debugging test failures, running the test suite, or setting up test infrastructure. Covers self-test, package tests, and modern E2E tests.
# Testing Test patterns, commands, and utilities for the Meteor codebase. ## Test Commands ```bash # CLI self-tests ./meteor self-test # Run all CLI tests ./meteor self-test "test name" # Run specific test ./meteor self-test --list # List available tests ./meteor self-test --exclude "^[a-b]" # Exclude tests by regex ./meteor self-test --retries 0 # Skip retries in development # Package tests (TinyTest — view results at http://localhost:3000) ./meteor test-packages # Test all core packages ./meteor test-packages mongo # Test specific package TINYTEST_FILTER="collection" ./meteor test-packages # Filter specific tests # Package tests in console (headless via Puppeteer — prints results to terminal) # Use this for automation or when you need terminal output without a browser. PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium ./packages/test-in-console/run.sh ./packages/test-in-console/run.sh # Test all core packages ./packages/test-in-console/run.sh "mongo" # Test specific package # E2E tests (Jest + Playwright) npm run install:e2e # Install dependencies npm run test:e2e # Run all E2E tests npm run test:e2e -- -t="React" # Run specific test # Native mobile smoke tests (Maestro) npm run install:native # Install deps, verify Maestro CLI on PATH npm run test:native:android # Run Android smoke flow npm run test:native:ios # Run iOS smoke flow ``` ## E2E Tests (`tools/e2e-tests/`) Jest + Playwright suite for verifying bundler integrations (rspack). Tests cover framework skeletons, command modes, routing, top-level await, and build/watch regressions. **Test apps:** `tools/e2e-tests/apps/`. Use `dev/modern-tools/rspack/E2E_COVERAGE.md` as the authoritative app-to-feature coverage map instead of inferring coverage from fixture names. ## Native mobile smoke tests (`tools/native-tests/`) Plain Node orchestrator + Maestro YAML flows. Builds a minimal Meteor app for Cordova, installs it on an iOS Simulator or Android emulator, and checks the initial runtime plus a live hot-code-push update. Coverage includes rendering, styles, Cordova APIs and asset paths, DDP, route reloads, and HCP. Runs nightly in CI plus on PRs labeled `mobile`. **Local prerequisites:** Maestro CLI (`curl -fsSL https://get.maestro.mobile.dev | bash`), Xcode (iOS), Android SDK + emulator (Android). See `tools/native-tests/README.md` for current Node and Android SDK minimums. **Tests:** `flows/launch.yaml` and `flows/hcp-updated.yaml` against `apps/smoke/`. ## Test Helpers Package (`packages/test-helpers`) Comprehensive testing utilities for Meteor applications. ### Async Testing ```javascript import { testAsyncMulti, simplePoll, waitUntil } from 'meteor/test-helpers'; // Wait for condition await waitUntil(() => someCondition, { timeout: 5000, interval: 100 }); // Poll until ready simplePoll(() => isReady(), successCallback, failCallback); ``` ### DOM/UI Testing ```javascript import { clickElement, simulateEvent, canonicalizeHtml, renderToDiv } from 'meteor/test-helpers'; clickElement(button); simulateEvent(input, 'keydown', { keyCode: 13 }); const normalized = canonicalizeHtml(html); ``` ### Connection Testing ```javascript import { makeTestConnection, captureConnectionMessages } from 'meteor/test-helpers'; const conn = makeTestConnection(clientId); const messages = captureConnectionMessages(server); ``` ### Utilities | Function | Description | |----------|-------------| | `SeededRandom` | Predictable random for deterministic tests | | `try_all_permutations()` | Test all permutations of inputs | | `withCallbackLogger()` | Track callback invocations | | `mockBehaviours()` | Behavior mocking | ## Tinytest (`packages/tinytest`) Meteor's built-in test framework. ```javascript Tinytest.add('my test', function (test) { test.equal(1 + 1, 2); test.isTrue(true); test.throws(function () { throw new Error(); }); }); Tinytest.addAsync('async test', async function (test) { const result = await asyncOperation(); test.equal(result, expected); }); ``` ## Environment Variables | Variable | Description | |----------|-------------| | `TEST_METADATA` | Test configuration JSON | | `METEOR_TEST_PACKAGES` | Packages to test | ## Debug Commands ```bash # Verbose build output METEOR_DEBUG_BUILD=1 ./meteor run # Profile build performance METEOR_PROFILE=1 ./meteor build # Force rebuild ./meteor reset && ./meteor run # Debug Meteor tool with Chrome inspector TOOL_NODE_FLAGS="--inspect-brk" ./meteor ``` ## Writing Package Tests In `package.js`: ```javascript Package.onTest(function(api) { api.use(['tinytest', 'test-helpers', 'my-package']); api.addFiles('my-package-tests.js'); }); ``` In `my-package-tests.js`: ```javascript import { MyPackage } from 'meteor/my-package'; Tinytest.add('MyPackage - basic functionality', function (test) { const result = MyPackage.doSomething(); test.equal(result, expected); }); ```
View on GitHub