Skip to main content

add-test

Add a new integration test to PilotSwarm test suite. Tests verify end-to-end flows through PilotSwarmClient, duroxide orchestration, and the Copilot SDK.

Informations de source

Dépôt
microsoft/PilotSwarm
Dernière activité de la source
18 septembre 2026 à 23:38
Langue détectée de SKILL.md
anglais
Étoiles
14
Forks
7

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
add-test
description
Add a new integration test to PilotSwarm test suite. Tests verify end-to-end flows through PilotSwarmClient, duroxide orchestration, and the Copilot SDK.
For machine setup and provider coverage, read `docs/developer/contributing/local-ci-and-tests.md` and `.github/CI.md`. No flag means full PostgreSQL; `--all-providers` adds HDB-specific coverage; `--with horizondb` runs the complete suite on HDB. Default file concurrency is 8. New SDK test files join additive HDB coverage unless explicitly reviewed in `scripts/provider-test-coverage.json`. CI requires real HDB and rejects skips. # Add a New Test Integration tests live in `packages/sdk/test/local/` as individual `.test.js` files (or in subdirectories like `sub-agents/`). They require a running PostgreSQL database and a GitHub token (in `.env`). Tests use **vitest** with `describe`/`it`. ## Steps 1. **Create a new test file** in `packages/sdk/test/local/` following this pattern: ```javascript import { describe, it, beforeAll } from "vitest"; import { createTestEnv, preflightChecks } from "../helpers/local-env.js"; import { withClient } from "../helpers/local-workers.js"; import { assert, assertNotNull } from "../helpers/assertions.js"; const TIMEOUT = 120_000; async function testMyFeature(env) { await withClient(env, async (client) => { const session = await client.createSession(); console.log(" Sending: prompt text"); const response = await session.sendAndWait("prompt text", TIMEOUT); console.log(` Response: "${response}"`); assertNotNull(response, "Should get a response"); }); } describe.concurrent("My Feature", () => { beforeAll(async () => { await preflightChecks(); }); it("My Test Case", { timeout: TIMEOUT }, async () => { const env = createTestEnv("my-feature"); try { await testMyFeature(env); } finally { await env.cleanup(); } }); }); ``` 2. **Add to the vitest config** — the file will be auto-discovered if it matches `test/local/**/*.test.js`. Ensure the vitest config includes the path. 3. **Run the test**: ```bash cd packages/sdk npx vitest run test/local/my-feature.test.js # run just this file npx vitest run test/local/my-feature.test.js -t "My Test" # filter by test name ./scripts/run-tests.sh --suite=my-feature # via the runner script ``` ## Patterns - **`withClient(env, fn)`** — spins up a co-located worker + client pair, auto-forwards `setSessionConfig`. Use for most tests. - **Manual worker/client** — for testing specific worker features (e.g., `registerTools`), create them manually outside `withClient`. - **Tool tests** — set a `let toolCalled = false` flag, assert it's `true` after the prompt. - **Event tests** — use `session.on()` or `session.getMessages()`, add a `setTimeout` delay for polling. - **Timer tests** — use `waitThreshold: 0` in client opts to force durable timers even for short waits. - **CMS validation** — use `createCatalog(env)` and `validateSessionAfterTurn(env, sessionId)` from `test/helpers/cms-helpers.js`. ## Conventions - **No custom system prompts** — use `client.createSession()` without overriding `systemMessage`. The default agent prompt should be sufficient. If it isn't, fix the product, not the test. - **No retries** — never add `retry` to test configs. Fix the root cause. - Use `describe.concurrent()` for file-level parallelism within the vitest runner. - Use `TIMEOUT` constant (120s default) for `sendAndWait`. - Use assertion helpers from `test/helpers/assertions.js`. - Use `describe`/`it` from `vitest`. - Log key values with `console.log(" ...")` for debuggability. - Each test creates its own `env` via `createTestEnv()` for schema isolation. - If a change adds or modifies a TUI keybinding, update the startup keybinding hint/splash and the help dialog/modal at the same time, and add or update validation coverage for the affected user flow when practical. ## Key files - `packages/sdk/test/local/` — all test files - `packages/sdk/test/helpers/` — shared helpers (assertions, fixtures, local-env, local-workers, cms-helpers) - `packages/sdk/vitest.config.js` — vitest configuration - `scripts/run-tests.sh` — shell runner for all suites
Voir sur GitHub