testing
TDD/BDD testing principles. Use when writing tests, reviewing test coverage, setting up testing, or discussing test strategy and test architecture.
SKILL.md.claude/skills/testing/SKILL.md
GitHubname: testing description: TDD/BDD testing principles. Use when writing tests, reviewing test coverage, setting up testing, or discussing test strategy and test architecture. context: fork files: ["/tests/", "/test/", "/tests/", "/spec/", ".test.", ".spec.", "Test.", "_test.*"]
Testing - Principes TDD/BDD (2026)
Principes universels de testing pour toutes les technologies du framework Claude-Craft.
Principes fondamentaux
- TDD Cycle: RED → GREEN → REFACTOR
- Couverture cible: >= 80%
- Pyramide: Unit (70%) > Integration (20%) > E2E (10%)
- Pattern: Arrange-Act-Assert (AAA)
- Nommage: Tests descriptifs expliquant le comportement
Outils recommandés 2026
| Stack | Unit/Composants | E2E/Browser | Mutation Testing |
|---|---|---|---|
| JS/TS/React | Vitest 5 (Browser Mode stable) | Playwright | Stryker |
| PHP/Laravel/Symfony | Pest 5 (PHPUnit 13, PHP 8.4+, Browser Testing) | Playwright via Pest | Infection |
| Python | pytest 9.x + Ruff 0.17+ | Playwright | Mutmut |
| Flutter | flutter_test + bloc_test 10+ | Patrol 4 | built-in |
| React Native | RNTL 14 + Jest | Maestro (ou Detox) | Stryker |
Sources : Vitest Browser Mode, Pest 5 Upgrade Guide, Stryker Mutator
Stratégies 2026
Vitest 5 — Browser Mode stable
Abandonner JSDOM lourd. Chromium/Firefox/WebKit natifs.
// vitest.config.ts
import { defineConfig } from 'vitest/config';
import { playwright } from '@vitest/browser-playwright';
export default defineConfig({
test: {
browser: {
enabled: true,
provider: playwright(),
instances: [{ browser: 'chromium' }], // ou 'firefox', 'webkit'
},
},
});
Source : Vitest Browser Mode
Mutation Testing — "Coverage ment, mutation scores disent la vérité"
Tester la qualité des tests. Mutation score >= 80%.
# Stryker (JS/TS/C#)
npx stryker run
# Infection (PHP)
vendor/bin/infection --min-msi=80
# Mutmut (Python)
mutmut run
Source : Stryker Mutator
Property-based Testing
Générer des tests à partir de propriétés invariantes.
// fast-check (JS/TS)
import fc from 'fast-check';
test('sorting preserves all elements', () => {
fc.assert(
fc.property(fc.array(fc.integer()), (arr) => {
const sorted = [...arr].sort();
return sorted.length === arr.length;
})
);
});
Source : fast-check
Pest 5 — Browser Testing intégré
// Pest 5 avec Playwright natif
test('user can login', function () {
visit('/login')
->fill('email', 'alice@example.com')
->fill('password', 'secret')
->click('Login')
->assertPathIs('/dashboard');
});
Source : Pest Browser Testing
Vitest Projects — Monorepos
workspace est déprécié depuis Vitest 3.2 au profit de projects.
// vitest.config.ts
import { defineConfig } from 'vitest/config';
import { playwright } from '@vitest/browser-playwright';
export default defineConfig({
test: {
projects: [
'packages/*', // Unit tests (un vitest.config par package)
{
test: {
name: 'browser',
include: ['e2e/**/*.test.ts'],
browser: { enabled: true, provider: playwright(), instances: [{ browser: 'chromium' }] },
},
},
],
},
});
Source : Vitest Projects
BDD — un outil Gherkin par écosystème
| Écosystème | Outil |
|---|---|
| JS/TS | Cucumber.js (@cucumber/cucumber) |
| PHP/Symfony | Behat 4.x |
| Python | pytest-bdd |
Pour l'E2E mobile, Maestro (flows YAML) couvre React Native, Flutter et natif ; Patrol (Flutter) et Detox (React Native) restent des alternatives intégrées à leur framework.
Voir @.claude/references/base/testing.md pour documentation complète.