End-to-end testovanie React Native aplikácií prešlo v posledných rokoch dramatickou premenou. Ešte v roku 2023 bol Detox jasným kráľom medzi RN testovacími nástrojmi – dnes sa o trón delí s Maestrom, mladým, ale extrémne rýchlo rastúcim frameworkom od bývalých inžinierov Airbnb. Otázka „Maestro alebo Detox?" sa v roku 2026 stala rovnako bežnou ako kedysi „Redux alebo MobX?".
Tak sa do toho pustime. V tomto sprievodcovi porovnáme oba nástroje na úrovni architektúry, výkonu, jednoduchosti používania a integrácie do CI/CD. Pozrieme si reálne príklady testov, prejdeme inštaláciu krok za krokom a na konci dáme jasné odporúčanie pre rôzne typy projektov. Cieľom nie je vyhlásiť víťaza, ale pomôcť vám vybrať správny nástroj pre váš tím.
Prečo vôbec riešiť E2E testovanie v React Native?
Unit testy s Jestom a komponentové testy s React Native Testing Library sú nevyhnutné. No nedokážu odhaliť celú triedu chýb: zlyhanie navigácie po aktualizácii Expo Routera, biela obrazovka po prihlásení, nefunkčný deep link, alebo regresiu v platobnom toku. Tieto bugy sa objavia až vtedy, keď aplikácia beží na reálnom zariadení a používateľ klope prstom na obrazovku.
End-to-end testy spúšťajú celú aplikáciu v emulátore alebo na reálnom zariadení a simulujú správanie používateľa. V roku 2026 sa stali štandardom pre každú produkčnú React Native aplikáciu, ktorá má viac než pár obrazoviek. Otázka teda neznie, či máte E2E testy mať, ale akým nástrojom ich napísať.
Stručné predstavenie kandidátov
Detox: veterán s hlbokými koreňmi
Detox je open-source framework od spoločnosti Wix, ktorý bol od prvého dňa navrhnutý špecificky pre React Native. Jeho najväčšou silou je gray-box testovanie – Detox beží vo vnútri procesu aplikácie a má prístup k internému stavu: JavaScript thread, animácie, sieťové požiadavky, asynchrónne operácie. Vďaka tomu vie automaticky čakať, kým aplikácia dokončí všetky operácie, predtým než klikne na ďalší prvok. Žiadne ručné sleep(2000), ktoré sa raz minú.
Maestro: nováčik, ktorý všetko mení
Maestro vznikol ako spin-off bývalých inžinierov Airbnb a od svojho vydania v roku 2022 si získal obrovskú popularitu. Je to black-box framework – nevidí dovnútra aplikácie, namiesto toho používa systémovú vrstvu prístupnosti (accessibility) na interakciu s UI. Testy sa píšu v deklaratívnom YAML formáte, čo znamená, že ich vie napísať aj manuálny QA tester bez znalosti programovania. Úprimne, toto je veľká vec – v jednom z mojich predošlých tímov sme tým odbúrali takmer celú frontu „QA chce automatizáciu, ale nikto z nich nepíše JS".
Architektúra: black-box vs gray-box
Tento jediný rozdiel ovplyvňuje takmer všetko ostatné, takže si ho rozoberieme detailne.
Ako funguje Detox (gray-box)
Detox sa pri buildovaní aplikácie inštrumentuje do natívneho kódu cez špeciálny modul DetoxRNHostingService. Vo vnútri aplikácie pracuje synchronizačný monitor, ktorý sleduje:
- JavaScript thread (či sú dokončené všetky
setTimeout,setImmediatea Promise reťazce) - Native UI queue (či sú dokončené všetky layout operácie)
- Sieťové požiadavky (cez prepojenie s natívnymi HTTP klientmi)
- Animácie (vrátane Reanimated 4 worklets)
Test prejde k ďalšiemu kroku až vtedy, keď je aplikácia úplne idle. Eliminuje to potrebu manuálnych sleep() alebo waitFor() volaní, ktoré sú hlavným zdrojom flakiness v iných nástrojoch.
Ako funguje Maestro (black-box)
Maestro nepotrebuje žiadnu inštrumentáciu aplikácie. Komunikuje s emulátorom alebo zariadením cez iOS XCUITest a Android UIAutomator. To znamená, že vidí presne to, čo vidí používateľ – text na obrazovke, accessibility identifikátory, polohu prvkov.
Synchronizáciu rieši vstavanou heuristikou: každý príkaz má implicitný timeout, počas ktorého sa Maestro pokúša znova interagovať s prvkom, ak ho nenájde. Vďaka tomu sú testy odolné voči pomalému načítavaniu – ale za cenu o niečo dlhšieho behu.
Praktický dopad rozdielu
Black-box prístup Maestra znamená, že tým istým YAML súborom otestujete React Native, Flutter, KMP aj natívnu iOS/Android aplikáciu. Detox je naopak viazaný na React Native – ak váš tím v budúcnosti pridá natívny modul alebo Flutter komponent, Detox vás opustí.
Naopak, ak máte zložité asynchrónne toky (napríklad Reanimated animácie s gestami, ktoré spúšťajú sieťové dotazy), Detox vie čakať na úplný end-state lepšie ako Maestro. Toto sme si overili, bohužiaľ až po tom, čo nám ten istý test v Maestre 12-krát po sebe blikal červeným.
Inštalácia a setup: krok za krokom
Setup Maestra
Inštalácia Maestra je notoricky jednoduchá – netreba nič v projekte meniť. Stačí jeden príkaz:
curl -fsSL "https://get.maestro.mobile.dev" | bash
Po inštalácii overte, že CLI funguje:
maestro --version
# Maestro 1.40.0 alebo novšie
Vytvorte priečinok .maestro/ v koreni projektu a do neho prvý test, napríklad login.yaml:
appId: com.yourcompany.app
---
- launchApp:
clearState: true
- assertVisible: "Vitajte v aplikácii"
- tapOn: "Prihlásiť sa"
- inputText: "[email protected]"
- tapOn:
id: "password_input"
- inputText: "TajneHeslo123"
- tapOn: "Pokračovať"
- assertVisible: "Dashboard"
Test spustíte príkazom:
maestro test .maestro/login.yaml
Hotovo. Žiadne build profily, žiadne konfiguračné súbory, žiadny TypeScript. Od nuly k prvému testu za 10 minút. Bývalo to neuveriteľné, dnes je to štandard.
Setup Detoxu
Detox vyžaduje viac práce, no v roku 2026 sa setup výrazne zlepšil oproti starším verziám. Najprv si nainštalujte CLI a SDK:
npm install --save-dev detox jest @types/jest
npx detox init
Tento príkaz vytvorí .detoxrc.js, e2e/jest.config.js a šablónový test. Pre Expo projekty pridajte plugin do app.json:
{
"expo": {
"plugins": [
[
"@config-plugins/detox",
{
"subdomains": ["10.0.2.2", "localhost"]
}
]
]
}
}
Vygenerujte natívne projekty a postavte testovací build:
npx expo prebuild --clean
npx detox build --configuration ios.sim.debug
npx detox build --configuration android.emu.debug
Build pri prvom spustení trvá 5–15 minút (Detox potrebuje vytvoriť špeciálny binár s inštrumentáciou). Test napíšete v JavaScripte alebo TypeScripte:
describe('Login flow', () => {
beforeEach(async () => {
await device.launchApp({ newInstance: true });
});
it('should log in with valid credentials', async () => {
await expect(element(by.text('Vitajte v aplikácii'))).toBeVisible();
await element(by.text('Prihlásiť sa')).tap();
await element(by.id('email_input')).typeText('[email protected]');
await element(by.id('password_input')).typeText('TajneHeslo123');
await element(by.text('Pokračovať')).tap();
await waitFor(element(by.text('Dashboard')))
.toBeVisible()
.withTimeout(5000);
});
});
Test spustíte takto:
npx detox test --configuration ios.sim.debug
Výkon a flakiness v reálnych podmienkach
Podľa benchmarkov publikovaných na Maestro.dev/insights a interných meraní niekoľkých veľkých React Native tímov v roku 2026:
| Metrika | Detox | Maestro |
|---|---|---|
| Login flow (5 krokov) | 8–12 s | 12–18 s |
| Komplexný test (50 krokov) | 40–60 s | 70–100 s |
| Flakiness na CI (1000 behov) | 1.2–2 % | 0.5–1 % |
| Čas k prvému testu | 2–4 hodiny | 10–15 minút |
| Build čas pred testom | 5–15 min | 0 (používa produkčný APK/IPA) |
Detox je rýchlejší počas testovania vďaka deep synchronization. Maestro však vyhráva v celkovom čase od commitu po výsledok, pretože netreba špeciálny build. A na CI je práve toto to, čo bolí.
Maestro Studio: tajná zbraň
Jedným z dôvodov, prečo Maestro získalo takú popularitu, je Maestro Studio – desktopová aplikácia, ktorá vám umožňuje vizuálne klikať na prvky vašej aplikácie a automaticky generovať YAML kód. Spustíte ju príkazom:
maestro studio
Otvorí sa okno so živým náhľadom emulátora. Po kliknutí na akýkoľvek prvok vidíte všetky dostupné selektory (text, ID, accessibility label) a Maestro vám odporučí ten najstabilnejší. Test, ktorý by ste písali 30 minút, máte za 5.
Detox nemá oficiálny ekvivalent – hoci komunita vyvinula nástroj Detox Inspector, ktorý funguje cez Chrome DevTools. Je menej dopracovaný a vyžaduje, aby aplikácia bežala v debug móde.
Integrácia s CI/CD v 2026
Maestro v GitHub Actions
Maestro Cloud je hostovaná služba, ktorá spúšťa testy na reálnych zariadeniach v paralelných streamoch. Konfigurácia v GitHub Actions:
name: E2E s Maestrom
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: mobile-dev-inc/action-maestro-cloud@v1
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: build/app-release.apk
workspace: .maestro/
Maestro Cloud vám pošle do PR komentár s odkazom na video nahrávky každého testu. Pri zlyhaní vidíte presne, čo používateľ videl pred chybou. Toto je doslova life-changing, keď debugujete o pol druhej v noci.
Detox v GitHub Actions
Detox je úplne lokálny, takže CI runner musí mať nainštalovaný Xcode (pre iOS) alebo Android SDK. To znamená macOS runner s 14 GB RAM:
name: E2E s Detoxom
on: [pull_request]
jobs:
ios-e2e:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx expo prebuild --platform ios
- run: |
brew tap wix/brew
brew install applesimutils
- run: npx detox build --configuration ios.sim.release
- run: npx detox test --configuration ios.sim.release --headless --record-logs all
Celý beh trvá 25–40 minút. Väčšinu času zaberá build aplikácie – a práve toto je hlavný dôvod, prečo Maestro vyhráva v rýchlosti feedback loopu.
Pokročilé scenáre
Mockovanie sieťových požiadaviek
Detox má vstavanú podporu pre device.setURLBlacklist() a externé knižnice ako Detox Mock Server. Maestro v základe nepodporuje mockovanie – odporúča sa použiť reálnu staging API alebo lokálny mock server, ktorý spustíte cez maestro test --env API_URL=http://localhost:3001.
Push notifikácie
Detox má prvotriednu podporu pre simuláciu push notifikácií:
await device.sendUserNotification({
trigger: { type: 'push' },
title: 'Nová správa',
body: 'Máte 3 neprečítané správy',
payload: { conversationId: 'abc123' }
});
Maestro takúto operáciu nepodporuje natívne. Riešenie? Odoslať notifikáciu cez Expo Push Service v before hook-u. Funguje, ale nie je to elegantné.
Deep linking
Oba nástroje to zvládajú. V Maestre:
- openLink: "myapp://product/12345"
V Detoxe:
await device.openURL({ url: 'myapp://product/12345' });
Testovanie bez internetu
Detox má device.setNetworkSynchronization(false) a vie simulovať offline stav cez device.disableSynchronization(). Maestro to rieši cez - setAirplaneMode: true. Jednoduchšie zápisom, no menej kontroly nad tým, čo sa presne deje.
Best practices pre React Native v roku 2026
1. Používajte stabilné selektory
Najčastejšia príčina flaky testov je závislosť na vizuálnom texte, ktorý sa môže zmeniť (napríklad pri lokalizácii). Pridávajte testID propy:
<Pressable testID="login_button" onPress={handleLogin}>
<Text>{t('login.submit')}</Text>
</Pressable>
V Maestre použijete id: login_button, v Detoxe by.id('login_button').
2. Izolujte stav medzi testami
Každý test musí začínať s čistým stavom. V Maestre:
- launchApp:
clearState: true
clearKeychain: true
permissions: { all: "allow" }
V Detoxe použite device.launchApp({ newInstance: true, delete: true }).
3. Paralelizujte na CI
Maestro Cloud beží paralelne automaticky. Detox umožňuje paralelizáciu cez Jest workers:
npx detox test --configuration ios.sim.release --workers 3
Pozor – každý worker konzumuje cca 4 GB RAM, takže nezahltite CI runner. Toto je presne tá rana, ktorá mi raz zhodila celý macOS runner uprostred release dňa.
4. Nahrávajte video pre debugging
Pri zlyhaní testu chcete vidieť, čo presne sa stalo. Maestro Cloud nahráva automaticky. V Detoxe:
npx detox test --record-videos all --record-logs all
5. Nepíšte príliš jemnozrnné testy
E2E testy sú drahé. Píšte ich na úrovni kritických user journey – registrácia, login, checkout, kľúčové funkcie. Detaily UI nechajte komponentovým testom. Inak skončíte s test suite, ktorá beží 90 minút a každý druhý zoznam je červený.
Hybridný prístup: použite oba nástroje
V roku 2026 sa medzi pokročilými React Native tímami stáva populárnym hybridný prístup:
- Maestro pre 80 % testov – kritické flow, rýchla spätná väzba na PR, smoke testy v Maestro Cloud
- Detox pre 20 % testov – komplexné scenáre s deep synchronization, push notifikácie, sieťové edge cases
Tento prístup vyžaduje udržiavať dve sady testov, no v praxi platí, že tie zložité Detox testy nepotrebujete často meniť, zatiaľ čo Maestro testy slúžia ako prvá línia obrany pri každom PR.
Kedy zvoliť ktorý nástroj?
Maestro je správna voľba, ak:
- Ste v rannej fáze projektu a chcete rýchly štart
- Máte tím s manuálnymi QA testermi bez programátorskej skúsenosti
- Vyvíjate viacero aplikácií v rôznych stackoch (React Native + Flutter)
- Potrebujete testovať na reálnych zariadeniach v cloude
- Riešite hlavne kritické user journey, nie hĺbkové edge cases
Detox je lepší výber, ak:
- Vaša aplikácia má komplexné asynchrónne toky (animácie, real-time data)
- Tím má skúsenosti s JavaScript/TypeScript a chce písať testy v tom istom jazyku ako kód aplikácie
- Potrebujete simulovať push notifikácie, deep stav siete
- Vyžadujete čo najnižšiu flakiness (pod 1 % na masívnych test suite)
- Ste pripravení investovať čas do setupu výmenou za výkon
Záver
Spor „Maestro vs Detox" v roku 2026 nemá jediného víťaza. Maestro vyhráva pre väčšinu nových projektov svojou jednoduchosťou a rýchlosťou onboardingu – preto ho odporúčame ako východiskový bod pre 90 % tímov. Detox ostáva neoceniteľným nástrojom v rukách tímov, ktoré potrebujú hĺbkovú integráciu s React Native vnútornosťami a sú ochotní zaplatiť cenu komplexnejšieho setupu.
Najlepším postupom v roku 2026 je začať s Maestrom a doplniť Detox iba vtedy, keď narazíte na konkrétne limity – flakiness pri animáciách, simuláciu pushov alebo testy edge case scenárov, kde black-box prístup nestačí. Týmto pragmatickým postupom získate rýchlu spätnú väzbu pri PR a hĺbkovú istotu pri release. Môj osobný favorit? Maestro pre 90 % vecí, Detox tam, kde si hovorím „ono to bude blikať a ja neviem prečo".
Často kladené otázky (FAQ)
Je Maestro zadarmo?
Áno, samotný framework Maestro je open-source a zadarmo. Maestro Cloud, hostovaná služba pre paralelný beh testov na reálnych zariadeniach, má voľný plán so 100 spusteniami mesačne a platené plány od 99 USD/mesiac.
Funguje Detox s Expo?
Áno, ale potrebujete použiť npx expo prebuild na vygenerovanie natívnych projektov a pridať @config-plugins/detox do app.json. Detox nefunguje s Expo Go – potrebujete development build alebo bare workflow.
Môžem použiť Maestro na testovanie web aplikácií?
Maestro Web bol uvedený do bety v roku 2025 a v 2026 podporuje testovanie webových aplikácií cez Chromium. Detox podporu pre web nemá a ani neplánuje – ostáva čisto mobilným nástrojom.
Aký je rozdiel medzi Detox a React Native Testing Library?
React Native Testing Library testuje komponenty v izolácii, beží v Node.js bez emulátora a je rýchla (milisekundy). Detox spúšťa celú aplikáciu na emulátore alebo zariadení a testuje ju z perspektívy používateľa. Oba nástroje sú komplementárne – RNTL pre unit/komponentové testy, Detox pre end-to-end.
Ktorý nástroj má lepšiu podporu pre Reanimated 4 a New Architecture?
Detox vďaka svojej gray-box povahe vie automaticky čakať na dokončenie Reanimated worklets a Fabric layout commits. Maestro to rieši cez timeout heuristiku, ktorá môže občas zlyhať pri veľmi dlhých animáciách – v praxi pridajte - waitForAnimationToEnd krok pred kritickými assertions.
Treba na CI macOS runner?
Pre iOS testy áno – tak Detox, ako aj Maestro Cloud potrebujú simulátor, ktorý beží len na macOS. Ak testujete len Android, Linux runner stačí pre oba nástroje. Maestro Cloud vám túto starosť zoberie tým, že hostuje testovaciu infraštruktúru za vás.