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

Jest, React testing library - mocki się nie resetują

Object Storage Arubacloud
+1 głos
141 wizyt
pytanie zadane 20 marca 2022 w JavaScript przez Bakkit Dyskutant (7,600 p.)

Cześć, piszę testy do aplikacji w nextjs:

import ContactsFirstPageResponse from '@mocks/contacts/firstPage.json';
import ContactsSecondPageResponse from '@mocks/contacts/secondPage.json';
import ContactsEmptyResponse from '@mocks/contacts/empty.json';

const spy = jest.spyOn(axios, 'get');

describe('Contacts', () => {
	afterEach(() => {
        // tutaj sprawdzałem różne możliwości resetowania mocków, ale żadna nie działa
		spy.mockReset();
		spy.mockClear();
		spy.mockRestore();
		jest.clearAllMocks();
		jest.restoreAllMocks();
		jest.resetAllMocks();
	});

	it('show empty list component', async () => {
		spy.mockResolvedValue(ContactsEmptyResponse);

		// ...
	});

	it('render 10 contacts and fetch 10 more on click', async () => {
		spy.mockResolvedValue((url: string) => {
			if (url.includes('?page=1')) {
				return ContactsFirstPageResponse;
			} else {
				return ContactsSecondPageResponse;
			}
		});

		// ...
	});
});

Jest config:

const nextJest = require('next/jest');

const createJestConfig = nextJest({
	dir: './',
});

const { pathsToModuleNameMapper } = require('ts-jest');
const { compilerOptions } = require('./tsconfig');

const customJestConfig = {
	setupFilesAfterEnv: ['<rootDir>/jest-setup.js'],
	moduleDirectories: ['node_modules', '<rootDir>/'],
	testEnvironment: 'jest-environment-jsdom',
	moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
	clearMocks: true,
};

module.exports = createJestConfig(customJestConfig);

 

Problem polega na tym, że pierwszy test dostaje response z pliku ContactsEmptyResponse (i test przechodzi, czyli wszystko ok), ale już drugi test również dostaje ContactsEmptyResponse zamiast ContactsFirstPageResponse lub ContactsSecondPageResponse

1
komentarz 20 marca 2022 przez Bakkit Dyskutant (7,600 p.)
A ten głos w dół za?
komentarz 20 marca 2022 przez ScriptyChris Mędrzec (190,190 p.)

@Bakkit, sprawdź tymczasowo czy użycie mockResolvedValueOnce (zamiast mockResolvedValue) pomoże.

1 odpowiedź

0 głosów
odpowiedź 20 marca 2022 przez Wiciorny Ekspert (269,810 p.)
edycja 20 marca 2022 przez Wiciorny

Ustaw dla JASMINE setUpState i before-each. Nie resetują się, bo działasz na testaach w ramach 1 "case"- jednego bloku wykonywalnego.

describe('Contacts', () =>

to jest jeden kontekst wywołania, więc stan w zakresie tego kontekstu, testy mają ten sam stan i obiekt.
https://jasmine.github.io/tutorials/your_first_suite
poczytaj o ustawianiu stanu i wykonywaniu 
generalnie mimo, że before i after działa w zakresie każdego "it-> case" 
https://stackoverflow.com/questions/51534192/aftereach-and-beforeeach-only-for-describes
to istnieje istotna różnica 
After zresetuje się po wykonaniu wszystkich  TESTÓW. 
W tym co napisałeś 

const spy = jest.spyOn(axios, 'get');

spy- obiekt jest ustawiany tylko raz 

dodaj do twojej metody after each 
 

spy.calls.reset();

 

Podobne pytania

+1 głos
0 odpowiedzi 212 wizyt
pytanie zadane 10 marca 2021 w JavaScript przez poldeeek Mądrala (5,980 p.)
0 głosów
0 odpowiedzi 70 wizyt
0 głosów
2 odpowiedzi 212 wizyt
pytanie zadane 5 czerwca 2021 w JavaScript przez poldeeek Mądrala (5,980 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 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!

...