Babysitter cli-e2e-test-harness
Set up E2E test harness for CLI applications with process spawning and assertions.
install
source · Clone the upstream repo
git clone https://github.com/a5c-ai/babysitter
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/a5c-ai/babysitter "$T" && mkdir -p ~/.claude/skills && cp -r "$T/library/specializations/cli-mcp-development/skills/cli-e2e-test-harness" ~/.claude/skills/a5c-ai-babysitter-cli-e2e-test-harness && rm -rf "$T"
manifest:
library/specializations/cli-mcp-development/skills/cli-e2e-test-harness/SKILL.mdsource content
CLI E2E Test Harness
Set up E2E test harness for CLI applications.
Generated Patterns
import { spawn, SpawnOptions } from 'child_process'; interface CLIResult { stdout: string; stderr: string; exitCode: number | null; } export async function runCLI(args: string[], options?: SpawnOptions): Promise<CLIResult> { return new Promise((resolve) => { const proc = spawn('node', ['./dist/index.js', ...args], { env: { ...process.env, NO_COLOR: '1' }, ...options, }); let stdout = ''; let stderr = ''; proc.stdout?.on('data', (data) => { stdout += data; }); proc.stderr?.on('data', (data) => { stderr += data; }); proc.on('close', (exitCode) => { resolve({ stdout, stderr, exitCode }); }); }); } export function expectOutput(result: CLIResult) { return { toContain: (text: string) => expect(result.stdout).toContain(text), toMatchSnapshot: () => expect(result.stdout).toMatchSnapshot(), toExitWith: (code: number) => expect(result.exitCode).toBe(code), }; }
Target Processes
- cli-unit-integration-testing
- mcp-server-testing-suite