GraphQL.cz/Fórum/Jak testovat GraphQL dotazy a mutace ve Storybooku?

Jak testovat GraphQL dotazy a mutace ve Storybooku?

Mám dotaz ohledně testování GraphQL dotazů a mutací ve Storybooku. Vím, že Storybook je skvělý nástroj pro vývoj komponent, ale jak se to vlastně dělá s GraphQL? Mám nějaké komponenty, které potřebují komunikovat s GraphQL API a chci je otestovat v izolaci. Jakým způsobem mohu simulovat API volání přímo ve Storybooku? Je lepší použít nějaké mockovací knihovny jako například Apollo MockedProvider nebo něco jiného? Jak vlastně nastavím data pro tyto testy? A co když mám složitější dotazy nebo mutace, jak se s tím vypořádat? Ocenil bych i příklady, protože jsem se teď začal učit, a občas se v tom ztrácím. Také by mě zajímalo, jestli existují nějaké osvědčené postupy, které by mi mohly pomoci při organizaci těchto testů? Děkuji za jakoukoli pomoc!

122 slov
1.2 minut čtení
5. 5. 2022
Richard Vojtěch

Tak jasně, testovat GraphQL dotazy a mutace ve Storybooku je fakt užitečný. Můžeš použít Apollo MockedProvider, což je super na simulaci těch API volání. V podstatě to funguje tak, že obalíš svoji komponentu do toho MockedProvideru a nastavíš mock data pro tvoje dotazy. Tím pádem ti to umožní vidět, jak komponenta reaguje na různé stavy (loading, error atd.).

Když máš složitější dotazy nebo mutace, tak je dobrý to rozdělit na víc menších mocků. Třeba pro jeden příklad dotazu uděláš jeden mock a pro jiný zase jiný. Určitě si dej pozor na to, jaké data komponenta potřebuje - musíš je správně napasovat do mocku.

Co se týče organizace, tak doporučuji mít nějakou strukturu v souborech – třeba složku __mocks__ vedle komponenty, kde si budeš ukládat ty mock data. Zkus si také udělat pár příkladů s různými stavy, aby ses ujistil, že tvoje komponenty fungují za všech okolností.

Pár příkladů pro start: můžeš mít jednoduchý use case s dotazem na seznam produktů a pak jeden pro mutaci, která přidává nový produkt. Takže zkusíš třeba ten loading state při načítání produktů a pak success/error state při přidání produktu.

Hlavně experimentuj a uč se! Je to hodně o praxi.

191 slov
1.9 minut čtení
14. 9. 2023
Eva Švábová

Testování GraphQL dotazů a mutací ve Storybooku je v pohodě, a fakt doporučuji použít Apollo MockedProvider. Je to super jednoduchý způsob, jak simulovat API volání bez nutnosti mít běžící server. Můžeš si vytvořit mockovaná data a pak je použít jako props pro komponenty, co testuješ.

Pro nastavení dat to vypadá nějak takhle: když máš komponentu, co volá nějaký dotaz, tak obalíš ji do MockedProvider a předáš mu mock data. Třeba:

 import \{ MockedProvider \} from '@apollo/client/testing';

const mocks = [
  \{  
    request: \{  
      query: MY_QUERY,
      variables: \{ id: 1 \},
    \},
    result: \{
      data: \{ myData: \{ id: 1, name: 'Test' \}\}
    \},
  \},
];

\<MockedProvider mocks=\{mocks\} addTypename=\{false\}\> 
  \<MyComponent /\>
\</MockedProvider\>

Pokud máš složitější dotazy nebo mutace, tak se neboj udělat víc mocků pro různé scénáře. Každý mock může mít jiná data nebo i error stavy, což je super pro testování chybových hlášení. Tímhle způsobem si můžeš vytvořit celou sadu scénářů, které pokryjou většinu toho, co bys mohl potřebovat.

Co se týče organizace testů, doporučuji mít strukturované soubory pro mocky a přímo je linkovat k jednotlivým komponentám. Můžeš mít třeba složku __mocks__ vedle komponenty a tam si ukládat všechny mocky pro danou komponentu. To ti ušetří čas a zmatek.

Jinak měj na paměti, že Storybook je primárně na vizuální testování komponent, takže snaž se držet věci co nejjednodušší a jasnější. Hodně štěstí!

250 slov
2.5 minut čtení
27. 12. 2023
Jaroslav Bureš

Když chceš testovat GraphQL dotazy a mutace ve Storybooku, tak je super použít Apollo MockedProvider. Umožní ti to simulovat API volání bez nutnosti komunikovat s reálným serverem. Tady je pár tipů, jak na to:

  1. Mockování dat: Vytvoříš si mock data podle toho, co tvoje komponenty očekávají. Například, když máš komponentu, co zobrazuje seznam uživatelů, můžeš vytvořit mock pro dotaz, který vrátí pole uživatelů s nějakými fiktivními daty.

  2. Přidání MockedProvideru: Oblečeš svou komponentu do Apollo MockedProvideru. Ten pak jako mocks vezme tvé mockované odpovědi a simuluje chování GraphQL API. Můžeš nastavit různé odpovědi pro různé dotazy.

  3. Složitější dotazy/mutace: Pokud máš složitější dotazy nebo mutace, tak si můžeš vytvořit víc mocků pro různé stavy (např. loading, error). Můžeš tak testovat, jak se tvoje komponenta chová v různých situacích.

  4. Osvědčené postupy: Udržuj si organizačně přehledné struktury pro mock data a zkus si psát i testy pro různé stavy i edge cases, aby ses ujistil, že komponenta funguje správně na všechny scénáře.

Příklad by mohl vypadat nějak takhle:

 import \{ MockedProvider \} from '@apollo/client/testing';
 import \{ MyComponent \} from './MyComponent';

const mocks = [
  \{
    request: \{ query: GET_USERS \},
    result: \{ data: \{ users: [\{ id: 1, name: 'John' \}, \{ id: 2, name: 'Jane' \}] \} \},
  \},
];

\<MockedProvider mocks=\{mocks\} addTypename=\{false\}\>
  \<MyComponent /\>
\</MockedProvider\>

Takhle bys měl mít testování GraphQL ve Storybooku pod kontrolou.

226 slov
2.3 minut čtení
4. 8. 2024
Zuzana Havlíčková
GraphQL.cz/Články/Storybook a React-GraphQL intergrated
Jak efektivně testovat GraphQL komponenty ve Storybooku?Podrobný návod na testování GraphQL komponentů ve Storybooku s nejlepšími praktikami a tipy pro vývojáře.
1000 slov
10 minut čtení
5. 11. 2020
Ondřej Kučera
Přečíst článek
Podobné otázky