Generujeme testovací data v JavaScriptu – zkracujeme Given

Abychom mohli naše testy považovat za Důkladné – Thorought podle testovacího principu FIRST, musíme zjednodušit samotné testovací případy.

Předpokládejme že naše testy následují strukturu Given-When-Then, zaměřme se na zjednodušení části Given – příprava dat před spuštěním testovaného scénáře. Mějme následující test:

Výše uvedený příklad testovacího případu v sekci Given obsahuje vytvoření entity user za účelem změny atributu department na „IT Support“. Pokud bychom takto chtěli napsat další dva testy, pravděpodobně bychom celý testovací případ zkopírovali, neboť „duplicita v testech je dovolena“. Bohužel tím ale znesnadníme jakékoliv následující změny v entitě user – přidání nového atributu znamená změnu na 3 místech.

Vytvořme si tedy malou továrničku (factory method) pro vytváření entity user.

Továrnička nám umožňuje jednoduše vytvářet entity aniž bychom museli řešit samotný způsob vytváření. Dosáhneme tím tedy kratší a lépe na správu jednodušší část Given. Přidání attributu do entity user je tedy pouze 1x, místo 3x pro tři testovací případy.

Pro použití továrničky na dalších testovacích případech je nutné mít možnost modifikovat výstup z továrničky. Přidejme tedy další test:

// GIVEN
const user = createUser()
user.divisionName = 'ICT';
const updateData = {
    divisionName: 'IT',
}
// WHEN ...

Modifikace výstupu továrničky bohužel opět zvětšuje délku Given, zkusme to tedy jinak:

// GIVEN
const user = createUser({ divisionName: "ICT" })
const updateData = {
    divisionName: 'IT',
}
// WHEN ...

A úprava továrničky:

import { User } from "../../src/userService"

export const createUser = (data: Partial<User> = {}) => ({
    id: 'e2f5a82a-3f2e-4b6d-b4d2-086afaa08f8a',
    username: 'john',
    email: 'john.doe@example.com',
    country: 'France',
    department: 'IT Services',
    divisionName: 'IT',
    ...data,
});

Díky možnosti přepsat výstupní data konkrétními daty, můžeme libovolně znovupoužít továrničku createUser.

Zavedením továrničky na statické vstupní data pro část testovacího případu Given se nám podařilo zredukovat zbytečně duplicitní vstupní data v testech. Blížíme se k tomu mít testy Důkladné – thorought dle principu FIRST a zároveň jednoduše spravovatelné.