web-dev-qa-db-fra.com

Comment réinitialiser le nombre d'appels de fonctions simulées Jest avant chaque test

Je suis nouveau dans Jest, j'essaye de l'utiliser pour tester si une fonction a été appelée ou non. J'ai remarqué que le mock.calls.length n'est pas réinitialiser pour chaque test, mais accumuler. Comment puis-je le faire 0 avant chaque test? Je ne veux pas que mes prochains tests dépendent des résultats du précédent.

Je sais qu'il y a avantChaque dans Jest - dois-je l'utiliser? Quel est le meilleur moyen de réinitialiser mock.calls.length? Je vous remercie.

Un exemple de code:

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);
});
44
Alex Efremov

Une façon que j’ai trouvée pour le gérer: effacer la fonction fictive après chaque test:

Pour ajouter à Sum.test.js:

afterEach(() => {
  local.getData.mockClear();
});
46
Alex Efremov

Comme @AlexEfremov l'a souligné dans les commentaires. Vous voudrez peut-être utiliser clearAllMocks après chaque test:

afterEach(() => {
    jest.clearAllMocks();
});

Gardez à l'esprit que cela effacera le nombre d'appels de chaque fonction fictive que vous avez, mais c'est probablement la bonne façon.

1
Daniel Marín