#reactjs #typescript #jestjs #react-hooks #enzyme
#reactjs #машинописный текст #jestjs #реагирующие хуки #фермент #typescript
Вопрос:
В моем компоненте есть такая логика, как:
const testRef = React.useRef<HTMLDivElement>(null);
React.useEffect(() => {
if (testRef.current) {
doSomething();
}
}, [testRef.current]);
итак, в модульном тестировании, как я мог бы вызвать изменение ссылки, чтобы можно было вызвать функцию внутри useEffect?
Комментарии:
1. у вас элемент с
ref={testRef}
отображается всегда или условно?
Ответ №1:
Чтобы запустить этот блок, вы ref
должны быть в использовании. Предположим, что вы не используете это условно, что вы используете непосредственно в каком-то элементе, поэтому он уже запускается doSomething()
при первом рендеринге. Вы можете использовать mount
из Enzyme, так как shallow
он плохо работает с хуками. Таким образом, вы сможете выполнить некоторое утверждение о том, что doSomething()
делает ваш компонент.
Комментарии:
1. Я думаю, проблема в том, как изменить значение ref, чтобы это могло вызвать useEffect; Я не уверен, существуют ли какие-либо похожие методы, такие как setProps() и setState(), которые можно было бы вызвать с помощью объекта shallow / mount
2.эффект использования также срабатывает при первом рендеринге компонента. Если вы уже используете его в каком-то элементе, он будет выполнять ваш
doSomething
stackblitz.com/edit/ref-useeffect?file=src/App.js3. Большое вам спасибо, я пробовал разные способы выполнения теста. shallow не запускает внутреннюю функцию useEffect, возможно, как вы сказали, она плохо работает с hook; mount выдаст некоторую ошибку о дочернем элементе append, которая выглядит связанной с самим ref, в то время как покрытие составляет 100%, хотя тестовый пример не удался.