Заглушка перехватчиков реакции-роутера типа «useLocation» не работает - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь написать модульный тест для функционального компонента React, у которого есть перехватчики маршрутизатора useLocation(), как показано ниже.

//index.js
function MyComponent(props) {
  const useQuery = () => new URLSearchParams(useLocation().search);
   const status = useQuery().get('status');

  if (status === 'success') {
    return <ShowStatus message="OK" secret={props.secret} />;
  } else {
    return <ShowStatus message="NOT OK" secret={props.secret} />;
  }
}

//index.spec.js
describe('Test MyComponent', () => {
  it('should send OK when success', () => {
     sinon.stub(reactRouter, 'useLocation').returns({
        search: {
            status: 'success'
        }
     });
     const props = { secret: 'SECRET_KEY' };
     const wrapper = enzyme.shallow(<MyComponent.WrappedComponent {...props}/>);

     expect(wrapper.type()).to.have.length(MyComponent);
     expect(wrapper.props().message).to.equal('OK);
     expect(wrapper.props().secret).to.equal(props.secret);
  });

  it('should send NOT OK when error', () => {
     sinon.stub(reactRouter, 'useLocation').returns({
        search: {
            status: 'error'
        }
     });
     const props = { secret: 'SECRET_KEY' };
     const wrapper = enzyme.shallow(<MyComponent.WrappedComponent {...props}/>);

     expect(wrapper.type()).to.have.length(MyComponent);
     expect(wrapper.props().message).to.equal('NOT OK);
     expect(wrapper.props().secret).to.equal(props.secret);
  });
});

Даже я глушу useLocation Я получаю ошибку

TypeError: Cannot read property 'location' of undefined
at useLocation (node_modules\react-router\modules\hooks.js:28:10)

Я пытаюсь протестировать ShowStatus компонент рендеринга с правильными опорами на основе параметра запроса.

Любое предложение / помощь приветствуется.

Обновление: Я заметил, хотя я импортирую из react-router-dom как в prod, так и в тестовый код. Я вижу, что продукт, взятый у react-router.

1 Ответ

0 голосов
/ 06 февраля 2020

У вас это работает? Это очень похоже на то, что я делаю, и задал вопрос здесь:

Как вы смоделируете использовать путь pathLocation (), используя мелкий тестовый фермент Reactjs?

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