• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dlaczego te mocki się nie resetują?

Object Storage Arubacloud
0 głosów
459 wizyt
pytanie zadane 15 kwietnia 2022 w JavaScript przez Bakkit Dyskutant (7,600 p.)
zamknięte 15 kwietnia 2022 przez Bakkit

Cześć.

Piszę apkę z wykorzystaniem NextJs. Do testowania używam Jest, React Testing Library oraz Nock do mockowania requestów axiosa (samo użycie tej biblioteki nie jest przyczyną problemu). Utknąłem na testach, problem polega na tym, że chciałbym aby mocki resetowały się po każdym it(), ale tak się nie dzieje i w drugim teście nadal jest zwracany json z pierwszego testu.

 

describe('Contacts component', () => {
    beforeEach(() => {
        nock.disableNetConnect();

        nock(BACKEND_URL).defaultReplyHeaders(nockReplyHeaders).options('/api/user').reply(200);
        nock(BACKEND_URL).defaultReplyHeaders(nockReplyHeaders).get('/api/user').reply(200, RootUserJson);
    });

    afterEach(() => {
        // tutaj resetuje mocki
        nock.cleanAll();
        nock.restore();
    });

    it('loads first contacts list', async () => {
        // tutaj prawidłowo mocki zwracają listę kontaktów
        nock(BACKEND_URL)
            .defaultReplyHeaders(nockReplyHeaders)
            .options(`/api/friendship/friends/${RootUserJson.id}?page=1`)
            .reply(200);
        nock(BACKEND_URL)
            .defaultReplyHeaders(nockReplyHeaders)
            .get(`/api/friendship/friends/${RootUserJson.id}?page=1`)
            .reply(200, ContactsFirstPageJson);

        render(
            <Provider store={store}>
                <Contacts />,
            </Provider>,
        );

        // expecty...
    });

    it('loads empty list and show empty component', async () => {
        // te mocki dalej zwracają listę kontaktów zamiast pustej listy
        nock(BACKEND_URL)
            .defaultReplyHeaders(nockReplyHeaders)
            .options(`/api/friendship/friends/${RootUserJson.id}?page=1`)
            .reply(200);
        nock(BACKEND_URL)
            .defaultReplyHeaders(nockReplyHeaders)
            .get(`/api/friendship/friends/${RootUserJson.id}?page=1`)
            .reply(200, EmptyJson);

        render(
            <Provider store={store}>
                <Contacts />
            </Provider>,
        );

        const emptyComponent = await screen.findByText('No contacts, add some friends');
        expect(emptyComponent).toBeInTheDocument();
    });
});

Proszę o pomoc.

komentarz zamknięcia: https://forum.pasja-informatyki.pl/564779/dlaczego-te-mocki-sie-nie-resetuja?show=564806#c564806

1 odpowiedź

+1 głos
odpowiedź 15 kwietnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Sądząc po kolejności wykonywania callbacków w Jest, żeby funkcja czyszcząca wykonała się po każdym teście umieszczonym wewnątrz describe, to trzeba ją przenieść poza describe.

Czyli:

afterEach(() => {
    // tutaj resetuje mocki
    nock.cleanAll();
    nock.restore();
});

describe('Contacts component', () => {
    beforeEach(() => {
        // ...
    });
 
    it('loads first contacts list', async () => {
        // ...
    });
 
    it('loads empty list and show empty component', async () => {
        // ...
    });
});

 

komentarz 15 kwietnia 2022 przez Bakkit Dyskutant (7,600 p.)
Przeniosłem funkcję afterEach nad funkcje describe i dalej ten sam efekt.
komentarz 15 kwietnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

A jak wstawisz console.log do callbacka wewnątrz afterEach, to czy on się uruchomi po każdym it (tam też wstaw console.log, żeby widzieć co się kiedy wykonuje)?

komentarz 15 kwietnia 2022 przez Bakkit Dyskutant (7,600 p.)

Rozwiązałem problem, leżał on w zupełnie innym miejscu. W komponencie do fetchowania danych używałem hooku useSWR, który w testowaniu wymaga resetowania pamięci.

Podobne pytania

+2 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 3 grudnia 2021 w JavaScript przez lzrd Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 125 wizyt
pytanie zadane 3 sierpnia 2018 w JavaScript przez dzawadzki Nowicjusz (120 p.)
0 głosów
1 odpowiedź 157 wizyt

92,632 zapytań

141,500 odpowiedzi

319,879 komentarzy

62,013 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...