web-dev-qa-db-fra.com

comment changer la valeur de retour de la fonction moche dans chaque test?

J'ai un module simulé comme celui-ci dans mon fichier de test de composant

  jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => true,
    guidanceEnabled: () => true
  }));

ces fonctions seront appelées dans la fonction de rendu de mon composant pour masquer et afficher certaines caractéristiques spécifiques.

Je veux prendre un instantané sur différentes combinaisons de la valeur de retour de ces fonctions fictives.

pour suppose que j'ai un cas de test comme celui-ci

 it('RowListItem should not render navigation and guidance options', () => {
    const wrapper = shallow(
      <RowListItem type="regularList" {...props} />
    );
    expect(enzymeToJson(wrapper)).toMatchSnapshot();
  });

pour exécuter ce scénario de test, je souhaite modifier les fonctions du module factice renvoyer les valeurs à false comme ceci de manière dynamique

jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => false,
    guidanceEnabled: () => false
  }));

parce que j'importe déjà une fois le composant RowListItem pour que mon module factice ne soit plus importé. donc ça ne changera pas. Comment puis-je résoudre ça ?

22
pashaplus

Vous pouvez vous moquer du module pour qu'il retourne des espions et l'importer dans votre test:

import {navigationEnabled, guidanceEnabled} from '../../../magic/index'

jest.mock('../../../magic/index', () => ({
    navigationEnabled: jest.fn(),
    guidanceEnabled: jest.fn()
}));

Ensuite, vous pourrez modifier l’implémentation réelle à l’aide de mockImplementation.

navigationEnabled.mockImplementation(()=> true)
//or
navigationEnabled.mockReturnValueOnce(true);

et dans le prochain test

navigationEnabled.mockImplementation(()=> false)
//or
navigationEnabled.mockReturnValueOnce(false);
37
Andreas Köberle

ce que tu veux faire c'est

import { navigationEnabled, guidanceEnabled } from '../../../magic/index';   

jest.mock('../../../magic/index', () => ({
  navigationEnabled: jest.fn(),
  guidanceEnabled: jest.fn()
}));

describe('test suite', () => {
  it('every test', () => {
    navigationEnabled.mockReturnValueOnce(value);
    guidanceEnabled.mockReturnValueOnce(value);
  });
});

vous pouvez en savoir plus sur ces fonctions ici => https://facebook.github.io/jest/docs/mock-functions.html#mock-return-values ​​

6
Dayan Moreno Leon