- Published on
Playwright - nečekaná změna hodnoty proměnné nastavené v beforeAll
Problém?
V předchozím článku jsme si vysvětlili, že pokud chceme ve více testech používat stejná testovací data (např. unikátní e-mail), je potřeba je vygenerovat jen jednou v beforeAll:
let validUser
test.describe('Authentication API', () => {
test.beforeAll(() => {
validUser = {
email: `testuser_${Date.now()}@example.com`,
password: 'MyPassword',
}
})
test('registrace nového uživatele', async () => {
console.log(validUser.email) // vypíše něco jako testuser_1753241517705@example.com
})
test('registrace duplicitního uživatele', async () => {
console.log(validUser.email) // mělo by být stejné jako výše
})
})
Pokud spustíme celou sadu testů, beforeAll se zavolá jen jednou a vše funguje správně.
Jenže při ladění testů se nám může stát, že dvěma testům nastavíme test.only a v druhém testu pak dostaneme jiný e‑mail, a test proto selže.
Proč se to děje?
Pro každý test označený test.only (popř. odpovídající podmínce v --grep) spustí Playwright samostatně jen vybraný test. Playwright při tom:
- znovu načte celý soubor s testy
- spustí znovu i
beforeAll - a tím pádem vygeneruje nový e-mail s novým
Date.now()
Jak to vyřešit?
Buď v těchto případech musíme pustit celou describe skupinu (beforeAll se zavolá jen jednou a data budou konzistentní) a nebo ladíme jen jeden test, můžete si e-mail dočasně „fixnout“:
validUser = {
email: 'testuser_fixed@example.com',
password: 'MyPassword',
}
Shrnutí
beforeAllfunguje správně, pokud spouštíte více testů najednou.test.onlyspustí Playwright izolovaně, takžebeforeAllse vykoná znovu a vygeneruje nové hodnoty.- Pro ladění si buď fixněte data, nebo spusťte celou sadu.
- Stejně jako v předchozím článku lze ale těmto problémům předejít, pokud budeme psát testy, které jsou na sobě nezávislé. Alespoň jsme na tomto příkladu ilustrovali, jak se chová beforeAll v kombinaci s test.only :)

