Вызов функции, которая выполняет компонент jest.mock, не работает

#reactjs #jestjs

Вопрос:

Я пытаюсь добавить вспомогательную функцию, чтобы имитировать компонент для всех моих тестов.

Я добавил это в setupTests.js:

 export const mockMyComponent = () => {
  jest.mock('./MyComponent', () => ({
    __esModule: true,
    default: ({ children }) => <>{children}</>,
  }));
};
 

Если я вызову эту функцию внутри своего теста, мои тесты не пройдут. Однако, если я использую jest.mock в своем тесте, все мои тесты проходят.

 import ...

mockMyComponent(); // DOESNT WORK

/*
THIS WORKS

jest.mock('./MyComponent', () => ({
  __esModule: true,
  default: ({ children }) => <>{children}</>,
}));
*/

describe('test', () => {
   test('mytest', () => { ... });
});
 

Комментарии:

1. Вам нужно издеваться на верхнем уровне, чтобы модуль заменялся при его импорте потребителем (что, по-видимому, и является тем, что вы тестируете). Если вы этого не сделаете, вам нужно явно перезагрузить все модули и снова импортировать потребителя. шутка.фиктивные вызовы поднимаются , вызов вашей пользовательской функции-нет.

2. Спасибо за ваш ответ, вы знаете, как я могу : you need to explicitly reload all of the modules and import the consumer again Или вы знаете, где я могу найти документацию по этому поводу? Не могу найти ни одного сайта в шутку

3. См., например jestjs.io/docs/jest-object#jestresetmodules .

4. Я думаю, что не совсем понял ваш ответ. Можно ли вызвать jest.mock внутри пользовательской функции ? Я не понимаю, где я должен вызывать jest.resetModules