testing

À utiliser lors de l'écriture ou de l'exécution de tests pour ce projet. Couvre les décisions entre tests unitaires et E2E, l'emplacement des fichiers de test, les modèles de simulation (mocks) et les tests spécifiques au projet…

npx skills add https://github.com/cloudflare/sandbox-sdk --skill testing

Testing in Sandbox SDK

This skill covers project-specific testing conventions. For TDD methodology, use the superpowers:test-driven-development skill.

Two Test Suites

Unit Tests

When to use: Testing isolated logic, client behavior, service methods, utilities.

Location:

  • SDK: packages/sandbox/tests/
  • Container: packages/sandbox-container/tests/

Runtime:

  • SDK tests run in Workers runtime via @cloudflare/vitest-pool-workers
  • Container tests run in Bun runtime

Commands:

npm test                              # All unit tests
npm test -w @cloudflare/sandbox       # SDK tests only
npm test -w @repo/sandbox-container   # Container tests only

Mock patterns:

  • SDK tests use a mock container (no Docker needed)
  • Container tests mock external dependencies (filesystem, processes)
  • Use createNoOpLogger() from @repo/shared for logger mocks

Known issue: SDK unit tests may hang on exit due to vitest-pool-workers workerd shutdown. Tests still pass/fail correctly - the hang is cosmetic.

E2E Tests

When to use: Testing full request flow, container integration, real Docker behavior.

Location: tests/e2e/

Runtime: Real Cloudflare Workers + Docker containers

Commands:

npm run test:e2e                                                           # All E2E tests (vitest + browser)
npm run test:e2e:vitest -- -- tests/e2e/process-lifecycle-workflow.test.ts # Single vitest file
npm run test:e2e:vitest -- -- tests/e2e/git-clone-workflow.test.ts -t 'test name'  # Single vitest test
npm run test:e2e:browser                                                   # Browser tests only (Playwright)

Note: Use test:e2e:vitest when filtering tests. The test:e2e wrapper doesn't support argument passthrough.

Key patterns:

  • All tests share ONE container for performance
  • Use unique sessions for test isolation
  • Tests run in parallel via thread pool
  • Config: vitest.e2e.config.ts (root level)

Writing E2E tests:

import { createTestSession } from './helpers';

describe('Feature X', () => {
  let session: TestSession;

  beforeEach(async () => {
    session = await createTestSession(); // Gets unique session
  });

  it('should do something', async () => {
    const result = await session.sandbox.exec('echo hello');
    expect(result.stdout).toBe('hello\n');
  });
});

When to Use Which

ScenarioTest Type
Client method logicUnit
Service business logicUnit
Request/response handlingUnit
Full command execution flowE2E
File operations with real filesystemE2E
Process lifecycle (start, stop, signal)E2E
Port exposure and preview URLsE2E
Git operationsE2E

Test-Specific Conventions

File naming: *.test.ts for both unit and E2E tests

Test structure:

describe('ComponentName', () => {
  describe('methodName', () => {
    it('should do X when Y', async () => {
      // Arrange
      // Act
      // Assert
    });
  });
});

Assertions: Use vitest's expect() with clear, specific assertions

Running Tests During Development

After making any meaningful code change:

  1. npm run check - catch type errors first
  2. npm test - verify unit tests pass
  3. npm run test:e2e - if touching core functionality

Build trust: The monorepo build system handles dependencies automatically. E2E tests always run against latest built code - no manual rebuild needed.

Plus de skills de cloudflare

workerd-api-review
cloudflare
Optimisation des performances, conception et compatibilité des API, vulnérabilités de sécurité et conformité aux spécifications des normes pour la revue de code workerd. Couvre la prise en compte de tcmalloc…
official
workerd-safety-review
cloudflare
Sécurité mémoire, sécurité des threads, concurrence et motifs de détection critiques pour la revue de code workerd. Couvre les risques liés à la frontière V8/KJ, la gestion de la durée de vie,…
official
module-registry
cloudflare
Charger lorsque vous travaillez avec le registre de modules dans workerd — lecture, modification, débogage ou révision de la résolution, compilation, évaluation ou enregistrement de modules…
official
reproduce
cloudflare
Reproduire un problème GitHub cloudflare/agents en créant un projet minimal Agents/Worker et en le déployant sur un compte Cloudflare temporaire, puis signaler…
official
local-explorer
cloudflare
Comment ajouter des produits/ressources à l'explorateur local ou à l'API locale. À utiliser lors de l'implémentation de nouvelles API locales ou de routes d'interface utilisateur sous…
official
commit-categories
cloudflare
Règles de catégorisation des commits pour les journaux de modifications et les résumés "nouveautés". DOIT être chargé avant de catégoriser les commits dans les commandes de journal de modifications ou de nouveautés. Fournit…
official
architecture
cloudflare
Utiliser lors de la première navigation dans la base de code, de l'ajout d'une nouvelle méthode client, de l'ajout d'un nouveau gestionnaire/service de conteneur, ou de la compréhension du flux d'une requête…
official
changesets
cloudflare
À utiliser lors de la création d'un changeset, de la préparation d'une version ou de l'incrémentation des versions. Couvre les packages à référencer, la manière de rédiger les descriptions de changeset destinées aux utilisateurs,…
official