#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