Я тестирую небольшой пользовательский хук, и я не могу заставить useEffect
внутри него сработать.У меня есть хук в смонтированном компоненте, и я успешно протестировал другие пользовательские хуки, которые не имеют useEffect
с этим методом.Ссылка устанавливается на false
, как и ожидалось (и прерывается, как ожидается, если установлена на true
), но никогда не обновляется до true
, когда useEffect
должен был работать.Код работает при запуске вне теста.
Мой хук:
export default function useIsComponentMounted() {
const isMountedRef = useRef(false);
useEffect(() => {
isMountedRef.current = true;
return function cleanup() {
isMountedRef.current = false;
};
}, []);
return isMountedRef.current;
}
Мой метод монтажа:
function TestHook(props) {
const { callback } = props;
callback();
return <div />;
}
export const testHook = callback => mount(<TestHook callback={callback} />);
Мой тест:
describe('useIsComponentMounted', () => {
it('should keep track of if a component is mounted', () => {
let expected = true;
let mounted;
const component = testHook(() => {
mounted = useIsComponentMounted();
});
expect(mounted).toBe(expected);
component.unmount();
expected = false;
expect(mounted).toBe(expected);
});
});