
Я столкнулся с этой проблемой, когда пытался смоделировать модуль, импортированный моим импортированным модулем.
Итак, я импортировал dependencyA, а dependencyA импортировал dependencyB.
Я пытался издеваться над dependencyB и столкнулся с этой проблемой.

❌ It throws an error "Reference Error: Cannot access 'depB' before initialization"
import { depA } from './depA';
const myMock = jest.fn().mockReturnValueOnce(true);
jest.mock('../depB', () => ({
depB: myMock,
}));
Эту проблему можно решить, только изменив расположение импорта и jest.Mock. Это создает проблему, потому что, когда мы импортируем depA и переносим его в среду выполнения нашего модуля, он уже считывает все зависимости файла depB.
Так что Jest просто блокирует его и не позволяет вам его изменить.
Сообщение об ошибке здесь не имеет особого смысла, но именно так все работает в JS Universe 😄
✅ It passes without a problem
const myMock = jest.fn().mockReturnValueOnce(true);
jest.mock('../depB', () => ({
depB: myMock,
}));
import { depA } from './depA';
Особое предупреждение
Когда я бродил по сети, пытаясь решить эту проблему, я видел много людей, ссылающихся на специальное предупреждение в шутливой документации.

Я немедленно попытался изменить имя моей переменной с myMock на mockMy, но это не оказало на меня никакого влияния, оно не удалось, как и в предыдущем случае.
❌ It throws an error "Reference Error: Cannot access 'initRabbitMock' before initialization"
import { depA } from './depA';
const mockMy = jest.fn().mockReturnValueOnce(true);
jest.mock('../depB', () => ({
depB: mockMy,
}));
Таким образом, единственным решением этой проблемы является изменение порядка импорта и макетов.
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .