Я новичок в React Hooks, и я пытаюсь добиться того, чтобы протестировать компонент React (называемый CardFooter), который содержит вызов ловушки useEffect, которая запускается, глобальная переменная контекста изменена.
CardFooter. js:
const CardFooter = props => {
const [localState, setLocalState] = useState({
attachmentError: false
});
const globalContext = useContext(GlobalContext);
React.useEffect(()=> {
setLocalState({
...localState,
attachmentError: globalContext.data.attachmentError
});
},[globalContext.data.attachmentError]);
}
CardFooter.test. js:
import Enzyme, { shallow } from 'enzyme';
Enzyme.configure({ adapter: new Adapter() });
describe('<CardFooter />', () => {
let useEffect;
const mockUseEffect = () => {
useEffect.mockImplementation(f => f());
};
useEffect = jest.spyOn(React, "useEffect");
mockUseEffect(); //
it('should render correctly with no props.', () => {
}
const mockUseEffect = () => {
useEffect.mockImplementation(f => f());
};
useEffect = jest.spyOn(React, "useEffect");
mockUseEffect();
const wrapper = shallow(<CardFooter />);
expect(toJson(wrapper)).toMatchSnapshot();
});
Ошибка, которую я получаю при выполнении теста:
TypeError: Невозможно прочитать свойство 'attachmentError' из неопределенного
Я попробовал подход, представленный здесь: https://medium.com/@pylnata / testing-реагировать-функциональный-компонент-используя-крючки- useeffect-usedispatch-and-useselect-in-shallow-9cfbc74f62fb . Однако кажется, что мелкий не выбирает смоделированную реализацию useEffect. Я также пытался насмехаться над useContext и globalContext.data.attachmentError. Кажется, ничего не работает.