Přeskočit na obsah

Lekce 01.5: Jak spouštět cvičení (How To Run the Exercises)

⏱️ 3 min čtení Lekce 01.5

🧠 Mentální model & teoretický rozbor

Nejefektivnější způsob, jak donutit AI model psát správný kód, je TDD smyčka (Test-Driven Development):

┌─────────────────────────────────────────────────────────────┐
│ 1. RED (Červená fáze) │
│ Existuje selhávající test přesně definující cíl. │
│ Agent vidí přesný stack trace a důvod selhání. │
└──────────────────────────────┬──────────────────────────────┘
┌──────────────────────────────▼──────────────────────────────┐
│ 2. GREEN (Zelená fáze) │
│ Agent napíše minimální implementační kód. │
│ Spustí test znovu -> test projde. │
└──────────────────────────────┬──────────────────────────────┘
┌──────────────────────────────▼──────────────────────────────┐
│ 3. REFACTOR & COMMIT │
│ Vyčistění kódu s jistotou, že testy chrání funkcionalitu.│
│ Okamžitý čistý commit do Gitu. │
└─────────────────────────────────────────────────────────────┘

Proč je TDD s agentem 10x účinnější než psaní kódu naslepo? Protože výstup testu slouží jako externí, deterministický arbitr. Model nemusí hádat, zda kód funguje – výsledek testu mu dá jasnou zprávu: buď EXIT CODE 0 (úspěch), nebo AssertionError (přesný popis chyby).


🏢 Realistický scénář z praxe

Potřebujete naimplementovat funkci pro výpočet DPH podle státu doručení v košíku.

  • Bez testu: Agent vygeneruje funkci, vy ji zkopírujete do projektu, spustíte aplikaci, ručně naklikáte košík v prohlížeči, zjistíte, že pro Německo počítá 20 % místo 19 %, vrátíte se do chatu… (ztráta 15 minut).
  • S TDD: Napište test s 5 státy. Předáte ho agentovi se slovy: „Zprovozni tento test.“ Agent během 15 sekund upraví sazby, spustí vitest run vat.test.ts a skončí s ověřeným výsledkem.

💻 Konkrétní ukázky kódu & promptů

Ukázka selhávajícího testu ve Vitestu (src/services/__tests__/tax.test.ts):

import { describe, it, expect } from 'vitest';
import { calculateTax } from '../tax';
describe('calculateTax', () => {
it('správně spočítá základní sazbu pro Českou republiku (21 %)', () => {
const result = calculateTax(1000, 'CZ');
expect(result).toEqual({ net: 1000, tax: 210, gross: 1210 });
});
it('správně aplikuje sníženou sazbu na knihy v CZ (0 %)', () => {
const result = calculateTax(500, 'CZ', { isBook: true });
expect(result).toEqual({ net: 500, tax: 0, gross: 500 });
});
it('vyhodí chybu pro neznámý kód země', () => {
expect(() => calculateTax(100, 'XX' as any)).toThrowError('UnsupportedCountryError');
});
});

Inženýrský prompt pro exekuci TDD:

Zadání: V souboru src/services/__tests__/tax.test.ts je připraven selhávající test.
Implementuj funkci calculateTax v src/services/tax.ts tak, aby všechny testy prošly.
Pravidla:
- Definuj striktní TypeScript typy pro vstupy a výstupy.
- Nevytvářej žádné další soubory.
- Ověř výsledek spuštěním: `npx vitest run src/services/__tests__/tax.test.ts`.

⚠️ Analýza selhání & Anti-patterns

Zásadní chyba: Spouštění celé testovací sady repozitáře

Pokud v sezení spustíte npm test a v repozitáři je 150 testů:

  • Výstup zabere 1 500 řádků terminálu.
  • Do kontextu se nasype 15 000 tokenů irelevantního výstupu.
  • Doporučení: VŽDY omezte spuštění testu na jediný soubor a přidejte přepínač pro okamžité zastavení při chybě (--bail 1).

🛠️ Inženýrský postup krok za krokem (Playbook)

  1. Vytvořte testovací soubor [nazev].test.ts.
  2. Definujte požadované vstupy a očekávané výstupy.
  3. Spusťte test v terminálu – ujistěte se, že selhává z očekávaného důvodu (např. funkce není definována).
  4. Předejte úkol Claude Code s filtrem na tento test.
  5. Po zeleném výsledku zkontrolujte kód a commitněte.

🧪 Praktické cvičení (Hands-on Lab)

Úkol:

Napište jednoduchý selhávající test pro validaci e-mailové adresy a nechte agenta implementovat řešení.

Kroky:

  1. Vytvořte src/validator.test.ts.
  2. Otestujte, že isValidEmail('user@domain.cz') vrací true a isValidEmail('invalid-email') vrací false.
  3. Spusťte Claude Code a vyzvěte ho, aby test opravil. Sledujte, jak agent sám test spouští a vyhodnocuje chyby.