Jestem nowy w Jest, próbuję go użyć do testowania, czy funkcja została wywołana, czy nie. Zauważyłem, że mock.calls.length nie resetuje się dla każdego testu, ale się kumuluje. Jak mogę ustawić 0 przed każdym testem? Nie chcę, żeby moje następne testy zależały od wyników poprzednich.
Wiem, że jest beforeEach w Jest - czy powinienem go użyć? Jaki jest najlepszy sposób na zresetowanie mock.calls.length? Dziękuję Ci.
Przykład kodu:
Sum.js:
import local from 'api/local';
export default {
addNumbers(a, b) {
if (a + b <= 10) {
local.getData();
}
return a + b;
},
};
Sum.test.js
import sum from 'api/sum';
import local from 'api/local';
jest.mock('api/local');
// For current implementation, there is a difference
// if I put test 1 before test 2. I want it to be no difference
// test 1
test('should not to call local if sum is more than 10', () => {
expect(sum.addNumbers(5, 10)).toBe(15);
expect(local.getData.mock.calls.length).toBe(0);
});
// test 2
test('should call local if sum <= 10', () => {
expect(sum.addNumbers(1, 4)).toBe(5);
expect(local.getData.mock.calls.length).toBe(1);
});
javascript
unit-testing
jestjs
Alex Efremov
źródło
źródło
local.mockClear()
to nie działa.jest.clearAllMocks()
? Dokumenty: jestjs.io/docs/en/jest-object#jestclearallmocksjest.clearAllMocks()
funkcję! UżywałemmockClear()
dojest.mock
zajęć i najwyraźniej makiety nie zostały w jakiś sposób całkowicie wyczyszczone (wywołania funkcji szpiegowskich wewnątrz pozorowanych klas nie zostały wyczyszczone). Spowodowało to naprawdę irytujące błędy różnicowych instancja obiektu:Compared values have no visual difference.
.jest.config.js
nieruchomośćresetMocks: true
.Jak @AlexEfremov wskazał w komentarzach. Możesz użyć
clearAllMocks
po każdym teście:afterEach(() => { jest.clearAllMocks(); });
Pamiętaj, że spowoduje to wyczyszczenie liczby wywołań każdej funkcji pozorowanej, którą posiadasz, ale prawdopodobnie jest to właściwy sposób.
źródło
Możesz skonfigurować Jest tak, aby resetował makiety po każdym teście, umieszczając to w
jest.config.js
:module.exports = { resetMocks: true, };
Oto dokumentacja tego parametru konfiguracyjnego: https://jestjs.io/docs/en/configuration#resetmocks-boolean
źródło