Enzyme: сбой теста в функции BrowserHistory

Я довольно новичок в модульных тестах. Я использую реакцию + редукцию, и я создал NotFound страницу/компонент, и я пишу его модульный тест. Есть событие onClick, которое мне нужно проверить, но оно не работает.

404.jsx

const GenericNotFound = () => {
  const goBack = () => {
    browserHistory.goBack();
  };
  return (
    <section >
      <h1>Sorry. The requested URL is not found</h1>
      <a onClick={goBack}>Go back</a>
    </section>
  );
};

Test.js

 const wrapper = shallow(<GenericNotFound />);
  const browserHistory = {
    goBack: sinon.spy()
  };
  const onClick = wrapper.find('a').props().onClick;
  onClick();
  expect(browserHistory.goBack).to.have.been.called;

Даже при этом у меня выдает ошибку Cannot read property 'goBack' of undefined

Заранее спасибо.


person Umair Sarfraz    schedule 13.08.2016    source источник
comment
Вы пробовали как sinon.spy(browserHistory, 'goBack') ? Не уверен в этом, но попробуйте   -  person anoop    schedule 14.08.2016
comment
Как именно? Не могли бы вы уточнить?   -  person Umair Sarfraz    schedule 14.08.2016
comment
Вместо использования const browserHistory = { goBack: sinon.spy() }; используйте его как sinon.spy(browserHistory, 'goBack')   -  person anoop    schedule 14.08.2016
comment
Нет все так же. Возможно ли, что это как-то связано с поверхностным рендерингом, не создающим полный DOM? Потому что я считаю, что broswerHistory нужна среда DOM?   -  person Umair Sarfraz    schedule 14.08.2016
comment
да, попробуйте с mount вместо shallow и spy изменить как `sinon.spy(browserHistory.prototype, 'goBack')   -  person anoop    schedule 14.08.2016
comment
Могу я спросить, почему browserHistory.prototype?   -  person Umair Sarfraz    schedule 14.08.2016
comment
потому что это функция-прототип github.com/reactjs/ реакция-маршрутизатор/блоб/мастер/модули/   -  person anoop    schedule 14.08.2016
comment
Ах я вижу. Я проверю с mount через несколько минут. Спасибо.   -  person Umair Sarfraz    schedule 14.08.2016
comment
Предложенное выше предложение сработало?   -  person anoop    schedule 14.08.2016
comment
Я не проверял, но у меня был небольшой разговор с одним из участников энзима, и он подтвердил, что это будет работать с mount.   -  person Umair Sarfraz    schedule 14.08.2016
comment
@anoop У меня другая проблема. Если бы вы могли помочь мне в этом. stackoverflow .com/questions/38940318/   -  person Umair Sarfraz    schedule 14.08.2016


Ответы (2)


Как обновлено в комментариях,

некоторые изменения

  1. Используйте mount вместо shallow

const mount = mount(<GenericNotFound />);

  1. Используйте spy, как показано ниже,

sinon.spy(browserHistory.prototype, 'goBack')

person anoop    schedule 14.08.2016

Следуя ответу @anoop:

 it('should render an anchor tag', () => {
      sinon.spy(browserHistory, 'goBack');
      const wrapper = mount(<GenericNotFound />;
      const onClick = wrapper.find('a').props().onClick;
      onClick();
      expect(browserHistory.goBack).to.have.been.called;
      browserHistory.goBack.restore();
    });
person Umair Sarfraz    schedule 16.08.2016