web-dev-qa-db-fra.com

Jest Réfermetteur: ne peut pas accéder à '' avant l'initialisation

Je reçois l'erreur:

ReferenceError: Cannot access 'myMock' before initialization

Même si j'ai respecté la documentation de Jest sur la levée: A limitation with the factory parameter is that, since calls to jest.mock() are hoisted to the top of the file, it's not possible to first define a variable and then use it in the factory. An exception is made for variables that start with the Word 'mock'.

Je fais ça:

import MyClass from './my_class';
import * as anotherClass from './another_class';

const mockMethod1 = jest.fn();
const mockMethod2 = jest.fn();
jest.mock('./my_class', () => {
  return {
    default: {
      staticMethod: jest.fn().mockReturnValue(
        {
          method1: mockMethod1,
          method2: mockMethod2,
        })
    }
  }
});

comme vous pouvez le constater que mes deux variables respectent la "standard" mais ne sont pas hété correctement.

Est-ce que je manque quelque chose?

Évidemment, cela fonctionne lorsque je viens de passer jest.fn() Au lieu de mes variables, mais je ne sais pas comment pouvoir les utiliser dans mon test plus tard.

10
Sufiane

Pour clarifier ce qui Jason Limantoro dit, déplacez le const ci-dessus où le module est importé:

const mockMethod1 = jest.fn(); // Defined here before import.
const mockMethod2 = jest.fn();

import MyClass from './my_class'; // Imported here.
import * as anotherClass from './another_class';

jest.mock('./my_class', () => {
  return {
    default: {
      staticMethod: jest.fn().mockReturnValue(
        {
          method1: mockMethod1,
          method2: mockMethod2,
        })
    }
  }
});
3
Matt