web-dev-qa-db-fra.com

Jest - se moquer d'un appel de fonction

J'essaie de me moquer d'un appel de fonction et je m'attends à ce qu'il ait appelé une autre fonction une fois.

myFunctions.test.js

import { resetModal } from '../myFunctions.js';

describe('resetModal', () => {
  it('calls the clearSomethingInModal function', () => {
    const clearSomethingInModal = jest.fn();
    resetCreationModal();
    expect(clearSomethingInModal.mock.calls.length).toBe(1);
  })
})

myFunctions.js

export resetModal() {
  clearSomethingInModal()
}

Cependant, la sortie de Jest indique que l'appel n'a pas été fait. Si quelqu'un peut suggérer la meilleure façon de procéder, je vous en serais très reconnaissant.

23
matt-p

Votre approche ne fonctionne pas car vous vous moquez de clearSomethingInModal uniquement dans le contexte de votre fichier de test, donc clearSomethingInModal dans le myFunctions.js est toujours l'original. Le point principal est que vous ne pouvez pas vous moquer de quelque chose qui est créé directement dans myFunctions.js. La seule chose que vous pouvez vous moquer sont:

  1. Modules que vous importez dans myFunctions.js, comme import clearSomethingInModal from 'clearSomethingInModal';
  2. Les rappels que vous passez dans votre fonction lorsque vous les appelez depuis votre test;

Cela a du sens si vous pensez à myFunctions.js comme une boîte noire, où vous pouvez contrôler ce qui se passe, comme des importations ou des arguments de fonction, et où vous pouvez tester ce qui sort. Mais vous ne pouvez pas tester ce qui se passe à l'intérieur de la boîte.

Voici deux exemples qui reflètent les 2 points de la liste:

myFunctions.test.js

import { resetModal } from '../myFunctions.js';
import clearSomethingInModal from 'clearSomethingInModal';

jest.mock('clearSomethingInModal', () => jest.fn())

describe('resetModal', () => {
  it('calls the clearSomethingInModal function', () => {
    resetCreationModal();
    expect(clearSomethingInModal.mock.calls.length).toBe(1);
  })
})

myFunctions.js

import clearSomethingInModal from 'clearSomethingInModal';

export resetModal() {
  clearSomethingInModal()
}

myFunctions.test.js

import { resetModal } from '../myFunctions.js';

describe('resetModal', () => {
  it('calls the clearSomethingInModal function', () => {
    const clearSomethingInModal = jest.fn();
    resetCreationModal(clearSomethingInModal);
    expect(clearSomethingInModal.mock.calls.length).toBe(1);
  })
})

myFunctions.js

export resetModal(clearSomethingInModal) {
  clearSomethingInModal()
}
30
Andreas Köberle