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.

776 slov
7.8 minut čtení
5. 11. 2020
Ondřej Kučera

Pokud jste někdy přemýšleli o tom, jak ideálně integrovat GraphQL do svého vývoje komponentů, pak jste na správném místě! V dnešní době je využívání GraphQL v kombinaci se Storybookem stále populárnější. Ale jak zajistit, že vaše GraphQL komponenty fungují tak, jak mají? Jak efektivně testovat tyto komponenty a zajistit jejich kvalitu? Pojďme se na to podívat zblízka.

Co je Storybook a proč ho používat?

Pokud ještě neznáte Storybook, je to nástroj, který vám umožňuje vyvíjet a testovat UI komponenty izolovaně. Můžete ho používat k dokumentaci, návrhu a testování vašich komponentů bez nutnosti spouštět celou aplikaci. To je skvělé, protože vám to umožňuje soustředit se na to nejdůležitější – na vaše komponenty a jejich funkčnost.

Jak funguje GraphQL?

Zatímco se bavíme o testování komponentů, nezapomeňme si připomenout, co vlastně GraphQL dělá. Je to jazyk pro dotazování na data, který umožňuje klientům přesně specifikovat, jaká data potřebují. To znamená, že místo abyste dostali všechny informace najednou (jako u tradičního REST API), můžete získat pouze to, co opravdu potřebujete.

Proč je důležité testovat GraphQL komponenty?

Je snadné předpokládat, že když máte dobře napsané GraphQL dotazy a funkční komponenty, vše bude fungovat hladce. Ale testování je klíčové! Pomáhá odhalit chyby dříve, než se dostanou do produkce. Navíc vám pomůže ověřit, že vaše komponenty správně reagují na různé stavy dat – například když jsou data načtena, jsou prázdná nebo došlo k chybě.

Krok 1: Nastavení Storybooku s GraphQL

Prvním krokem k efektivnímu testování vašich GraphQL komponent ve Storybooku je jejich správné nastavení. Nejprve nainstalujte Storybook do vašeho projektu:

npx sb init

Poté budete potřebovat knihovny pro práci s GraphQL. Obvykle využijete Apollo Client nebo Relay. Například pro Apollo:

npm install @apollo/client graphql

Nyní můžete začít s konfigurací vaší ApolloProvider v preview.js souboru Storybooku:

 import React from 'react';
 import \{ ApolloProvider \} from '@apollo/client';
 import \{ client \} from './apolloClient'; // Importujte svůj Apollo Client zde.

 export const decorators = [story =\> \<ApolloProvider client=\{client\}\>\{story()\}\</ApolloProvider\>];

Tímto způsobem zajistíte, že všechny vaše Storybook příběhy budou mít přístup k Apollo Clientu a budou moci provádět GraphQL dotazy.

Krok 2: Psaní příběhů pro vaše komponenty

Jakmile máte nastavené prostředí, můžete začít psát příběhy pro vaše komponenty. Například pokud máte komponentu UserProfile, která načítá uživatelská data pomocí GraphQL dotazu:

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

const GET_USER = gql`
  query GetUser \{
    user \{
      id
      name
      email
    \}
  \}
`;

const mocks = [
  \{
    request: \{
      query: GET_USER,
    \},
    result: \{
      data: \{
        user: \{
          id: '1',
          name: 'Jan Novák',
          email: '[email protected]',
        \},
      \},
    \},
  \},
];

 export default \{
  title: 'UserProfile',
  component: UserProfile,
\};

 export const Default = () =\> (
  \<MockedProvider mocks=\{mocks\} addTypename=\{false\}\>
    \<UserProfile /\>
  \</MockedProvider\>
);

Tento příběh zajišťuje, že při vykreslování UserProfile se použije mock datový dotaz. To vám umožní testovat vaši komponentu s kontrolovanými daty.

Krok 3: Testování různých stavů komponentů

Kromě základního stavu byste měli otestovat i různé scénáře: informace o uživateli nejsou k dispozici (např. prázdná data) nebo došlo k chybě při načítání dat. příklad: i když uživatel nedal žádná data: imunitní stav vypadá takto: mocks.push({ equest:{query:GetUser},result:{errors:[{message:"Something went wrong!"}],}}); nyní můžete napsat další příběh: default const Error = () => ( t<MockedProvider mocks={mocks} addTypename={false}> <UserProfile /></MockedProvider>); v tomto bodě si uvědomujeme důležitost pokrytí různých scénářů. vždy máme možnost vidět, jak naše komponenty reagují ve všech situacích. v tom spočívá síla testování! tímto způsobem zajistíme kvalitu našich UI prvků. všechny tyto stavy můžeme snadno sledovat přímo ve Storybooku. v tom je kouzlo! v případě zájmu o pokročilejší techniky si můžete přečíst více článků v našem blogu! vždy máme co nového co číst! všechno si zaslouží pozornost! tipuji také experimentovat s různými mock daty. když už jsme u toho! můžete vyzkoušet i nástroje jako jest a react-testing-library pro integraci s vašimi testovacími scénáři! esli jste zkouška? dokonce můžete psát e2e testy pomocí Cypress! všechny tyto možnosti vám pomohou posunout vaše dovednosti dál! když se zamyslíte nad výhodami testování vašich GraphQL komponent ve Storybooku zjistíte jak moc to může přispět k hladkému vývoji a údržbě vaší aplikace. samozřejmě existují i další osvědčené postupy jako udržování čistoty kódu nebo dodržování principů DRY (Don’t Repeat Yourself). jako vždy nezapomeňte se podívat na další články a tipy! vždy existuje něco nového co se naučit! jde o neustálý proces učení se a zlepšování našich skills! a proto neváhejte a začněte testovat vaše GraphQL komponenty ještě dnes!

42415 přečtení článku
271 lajků
5. 11. 2020
Ondřej Kučera
  • GraphQL

  • Storybook

  • testování komponentů

  • Apollo Client

  • MockedProvider

O autorovi

Ondřej Kučera

Mobile developer se specializací na React Native a iOS. Má 6 let zkušeností s vývojem mobilních aplikací využívajících GraphQL. Je autorem několika open-source knihoven pro mobilní GraphQL klienty. Na webu píše především o mobile-first přístupu k API designu a offline-first architektuře. Organizuje pravidelné meetupy pro mobilní vývojáře.

Dotazy k článku