| name | 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 |
| triggers | {"files":["**/tests/**","**/test/**","**/__tests__/**","**/spec/**","*.test.*","*.spec.*","*Test*.*","*_test.*"],"keywords":["test","coverage","TDD","BDD","mock","assert","unit test","integration test","e2e","end-to-end","fixture","factory","arrange act assert","given when then","red green refactor","test pyramid","mutation testing","property-based testing"]} |
| auto_suggest | true |
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 4.1+ (Browser Mode stable) | Playwright | Stryker |
| PHP/Laravel/Symfony | Pest 4.5+ (PHPUnit 12, Browser Testing) | Playwright via Pest | Infection |
| Python | pytest 8.x + Ruff 0.8+ | Playwright | Mutmut |
| Flutter | flutter_test + bloc_test 10+ | Patrol 3.13+ | built-in |
| React Native | RNTL + Jest | Detox/Maestro | Stryker |
Sources : Vitest 4, Pest 4, Stryker Mutator
Stratégies 2026
Vitest 4 — Browser Mode stable
Abandonner JSDOM lourd. Chromium/Firefox/WebKit natifs.
export default defineConfig({
test: {
browser: {
enabled: true,
name: 'chromium',
provider: 'playwright',
},
},
});
Source : Vitest Browser Mode
Mutation Testing — "Coverage ment, mutation scores disent la vérité"
Tester la qualité des tests. Mutation score >= 80%.
npx stryker run
vendor/bin/infection --min-msi=80
mutmut run
Source : Stryker Mutator
Property-based Testing
Générer des tests à partir de propriétés invariantes.
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 4 — Browser Testing intégré
test('user can login', function () {
$this->browse(function (Browser $browser) {
$browser->visit('/login')
->type('email', 'alice@example.com')
->type('password', 'secret')
->press('Login')
->assertPathIs('/dashboard');
});
});
Source : Pest 4 Browser Testing
Vitest Workspaces — Monorepos
export default defineWorkspace([
'packages/*/vitest.config.ts',
{
test: {
browser: { enabled: true, name: 'chromium' },
include: ['e2e/**/*.test.ts'],
},
},
]);
Source : Vitest Workspaces
Voir @.claude/references/base/testing.md pour documentation complète.