reactjs - Prečo jest nedokáže poskytnúť hook useTranslation vlastnému React hooku, ktorý testujem?
Vytváram test pre vlastný hook a kontrolujem, či správne analyzuje údaje. Vlastný hook používa hook useTranslation z i18next. V testovacom súbore som hook useTranslation nasimuloval takto:
jest.mock('react-i18next', () => ({
useTranslation: () => {
return {
t: (key: string) => key,
}
},
}))
Nezobrazuje mi žiadne chyby, jednoducho to neprekladá a vráti lokalizačné kľúče na poliach, ktoré má preložiť. Robím mocking nesprávnym spôsobom alebo by som mal urobiť nejakú ďalšiu konfiguráciu?
Odpoveď č. 1
Myslím si, že existuje nedorozumenie ohľadom účelu napodobňovania a testovania.
Podľa dokumentácie Jest:
Mock funkcie vám umožňujú testovať väzby medzi kódmi tým, že vymažú skutočnú implementáciu funkcie, zachytávajú volania tejto funkcie (a parametre odovzdané v týchto volaniach), zachytávajú inštancie konštrukčných funkcií pri vytvorení pomocou new a umožňujú konfiguráciu návratových hodnôt počas testovania.
Ak chcete otestovať funkčnosť vášho háku useTranslation, môžete vytvoriť test (bez mockovania). Týmto spôsobom môžete otestovať funkčnosť a správanie vášho háku v rôznych scenároch.
Teraz späť k vášmu kódu, ak chcete testovať komponent, ktorý používa externú funkciu, môžete túto funkciu nasimulovať a odovzdať ju komponentu. Takže v tomto prípade stačí nasimulovať funkciu a napísať o nej niekoľko výnimiek.
Napríklad, máte komponent formulára, ktorý má tlačidlo odoslať, s odoslaním sa údaje pošlú na server, takže môžete túto akciu odoslania nasimulovať a odovzdať ju komponentu v testovacom prostredí, potom očakávate, že pri kliknutí na tlačidlo odoslať sa spustí obslužná funkcia raz.
Takže ak chcete napodobniť svoj hák, musíte pre neho vrátiť falošné údaje:
const mockMyHook = jest.fn(x => 'translated');
Teraz volajte tento falošný hák vo vašej komponente a pri očakávaní s x vstupom získajte tanslated hodnotu.
