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

0 głosów
850 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 350 wizyt
pytanie zadane 3 grudnia 2021 w JavaScript przez lzrd Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 195 wizyt
pytanie zadane 3 sierpnia 2018 w JavaScript przez dzawadzki Nowicjusz (120 p.)
0 głosów
1 odpowiedź 239 wizyt

93,501 zapytań

142,434 odpowiedzi

322,788 komentarzy

62,938 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

Kursy INF.02 i INF.03
...