6 votes

Passer une variable hors de portée avec jest.mock

J'ai un objet fictif que j'utilise pour simuler react-native :

const MyMock = {
    MockA: {
        methodA: jest.genMockFn()
    },
    MockB: {
        ObjectB: {
            methodA: jest.genMockFn(),
            methodB: jest.genMockFn(),
        }
    }
};

jest.mock('react-native', () => {
    return MyMock;
});

Je déclare l'objet en dehors de jest.mock car j'en ai aussi besoin plus tard dans mes tests :

describe('MyClass', () => {
     beforeEach(() => {
         MyMock.MockB.ObjectB.methodA.mockClear();
         MyMock.MockB.ObjectB.methodB.mockClear();
     });
     //some other code

J'obtiens cette erreur :

L'usine de modules de jest.mock() n'est pas autorisé à faire référence à des variables hors du champ d'application.

Le problème est que je déclare MyMock en dehors de jest.mock . Mais je n'ai pas le choix, d'après ce que je vois.

Comment puis-je donc faire fonctionner le code tout en conservant MyMock en dehors de jest.mock ?

18voto

octavian Points 4804

Je n'avais pas lu entièrement le message d'erreur. Sur la dernière ligne (légèrement obscurcie), on trouve ceci :

Remarque : il s'agit d'une précaution visant à éviter les variables fictives non initialisées. Si l'on s'assure que l'objet fantaisie est requis paresseusement, les noms de variables préfixés par le préfixe mock sont autorisés.

Ainsi, lorsque j'ai changé MyMock à titre d'exemple mockMyMock et cela a fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X