Generujeme testovací data v JavaScriptu – zkracujeme Then

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!