Abychom mohli naše testy považovat za Důkladné – Thorought podle testovacího principu FIRST, musíme zjednodušit samotné testovací případy. V minulém článku jsme zkracovali část Given, teď se zaměříme na zkrácení části Then.
Mějme následující test jako ukázku s dlouhou částí Then:
Část Then obsahuje pouze jeden expect, nicméně v něm ověřujeme mnohem více dat než je pro tento testovací případ nutné. Měli bychom testovat zda jediná změněná hodnota z updateData
se opravdu aplikovala a ostatní data nechat na další testovací případy.
Pokud naše vstupní data jsou statická, je velmi snadné se na ně odkazovat při ověřování v testu. Pokud navíc rádi kopírujeme případy, je velmi snadné zkopírovat zbytečné ověření z jiného testovacího případu. Pojďme nyní vylepšit továrničku createUser
a přidejme do ní více náhodnosti z článku Generujeme testovací data v JavaScriptu.
Náhodné generování vstupních dat nám usnadní ověřování, neboť budeme ověřovat pouze to, co je pro nás v daném testovacím případu nutné. Then část pro test se zkrátí na pouhé 4 řádky:
// THEN
expect(currentUser).toMatchObject({
id: 'e2f5a82a-3f2e-4b6d-b4d2-086afaa08f8a',
department: 'IT Support',
})
Ověřování je výrazně jednodušší na čtení i na udržování. Pokud bychom chtěli přidat nový atribut k entitě User, nemuseli bychom měnit část Then vůbec.
Přidáním typu User do továrničky jsme navíc objevili problém, id
není deklarováno v typu User
vůbec. Dále stále potřebujeme ověřovat, že updateUser
aktualizoval tu správnou entitu se správným id
. Toho je možné poslední úpravou v továrničce a v testu:
V článku se nám podařilo zkrátit část Then testovacího případu a zároveň zavést náhodná vstupní data do testů (které stále můžeme kontrolovat). Díky této kombinaci vytváříme testy které je snadné rozšířit o nové testovací případy a také jednoduše rozšiřovat náš datový model – entitu User. Přidání jednoho atributu nevyvolá nutnost změny jediného testu, pouze továrničky createUser
.
K tomuto přístupu mě inspiroval kolega Michal Kočárek – děkuji!