Testovací fixtures jsou pevně nastavená data (data, objekty, stav), která testy potřebují ke spuštění, a metody setup/teardown připravují a vyčistí tento kontext před a po testech. Snižují duplikaci a zajistí, aby testy běžely v konzistentním, izolovaném stavu.
Setup a teardown
SETUP → runs BEFORE tests to prepare the context (create objects, data, connections)
TEARDOWN → runs AFTER tests to CLEAN UP (close connections, delete data, reset state)
→ frameworks provide hooks:
beforeEach / afterEach → before/after EACH test (fresh state per test — common)
beforeAll / afterAll → once before/after ALL tests in a group (shared expensive setup)
describe('UserService', () => {
let service, db;
beforeEach(() => { // fresh setup for EACH test (isolation)
db = createTestDb();
service = new UserService(db);
});
afterEach(() => db.close()); // clean up after each test
test('creates a user', () => { /* uses the fresh service/db */ });
});
Fixtures — opakovatelně použitelná testovací data/stav
FIXTURES → predefined data/objects tests use (a known starting state):
→ e.g. a sample user, a set of records, a configured object
→ FACTORIES → generate test data flexibly (build objects with sensible defaults +
overrides) — better than hardcoded data for varied scenarios
→ reduce duplication; give tests consistent, known data to work with
Osvědčené postupy
✓ Prefer beforeEach (fresh state per test) → ISOLATION (tests don't affect each other)
✓ Clean up in teardown → no leftover state causing flaky/order-dependent tests
✓ Keep setup minimal and clear; use factories for flexible test data
✓ Don't share MUTABLE state across tests (a cause of flakiness/order-dependence)
Proč to je důležité
Rozmíšení testovacích fixtures a setup/teardown je cenné, protože jsou zásadní pro psaní čistých, izolovaných, udržovatelných testů, takže jde o užitečné praktické poznatky.
Testy potřebují konzistentní počáteční kontext (data, objekty, stav), a metody setup/teardown (hooks beforeEach/afterEach a beforeAll/afterAll, které poskytují frameworky) připravují tento kontext před testy a vyčistí jej poté — snižují duplikaci (sdílený setup napsaný jednou místo v každém testu) a zajistí, aby testy běžely v známém stavu.
Rozmíšení těchto hooks a kdy použít který (beforeEach pro čerstvý stav na test, beforeAll pro drahé sdílené nastavení) je nezbytné pro dobrou organizaci testů.
Rozmíšení fixtures (předdefinovaná testovací data a objekty, které testům poskytují známý počáteční stav) a factories (flexibilní generování testovacích dat s rozumnými výchozími hodnotami a přepisováním, lepší než hardcodovaná data pro různé scénáře) je cenné pro poskytování testům konzistentních, spravovatelných dat.
Nejdůležitější je pochopení osvědčených postupů, které se váží na kvalitu testů: preferování beforeEach pro čerstvý stav na test zajistí izolaci (testy se vzájemně neovlivňují — zásadní pro spolehlivé testy), vyčištění v teardown zabrání zbývajícímu stavu, který způsobuje nestabilní, na pořadí závislé testy (běžný zdroj nestability), a nesdílení měnitelného stavu mezi testy se vyhýbá závislosti na pořadí a nestabilitě.
Tyto postupy přímo podporují izolaci a determinismus testů, které dobré testy vyžadují.
Protože testy potřebují konzistentní setup a vyčištění, a protože fixtures a setup/teardown (používané správně, se správnou izolací a vyčištěním) snižují duplikaci a zajistí izolovaný, deterministický stav, na kterém spolehlivé testy závisí, je rozmíšení testovacích fixtures a setup/teardown cenné, prakticky relevantní poznatky — důležité pro psaní čistých, izolovaných, udržovatelných testů, přímo podporující izolaci a determinismus, které rozlišují spolehlivé testy od nestabilních, užitečná dovednost aplikovaná v organizaci prakticky každé testovací sady.
