• 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ą?

VPS Starter Arubacloud
0 głosów
661 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 268 wizyt
pytanie zadane 3 grudnia 2021 w JavaScript przez lzrd Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 132 wizyt
pytanie zadane 3 sierpnia 2018 w JavaScript przez dzawadzki Nowicjusz (120 p.)
0 głosów
1 odpowiedź 179 wizyt

92,975 zapytań

141,939 odpowiedzi

321,182 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...