Хук useEffect не подвергается насмешкам со стороны jest.spyOn - PullRequest
1 голос
/ 05 января 2020

Я новичок в 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. Кажется, ничего не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...