Как протестировать keyDown и изменение url?

Как протестировать такой код?

componentWillReceiveProps(nextProps) {
    if (nextProps.keydown.event) {
      const loc = nextProps.location.pathname;
      const his = nextProps.history;
      const k = nextProps.keydown.event.which;
      if (k === 39 && loc=== '/index') {
        his.push('/index/loc1');
      } else if (k === 39 && loc === '/index/loc1') {
        his.push('/index/loc2');
      } else if (k === 37 && loc === '/index/loc1') {
        his.push('/index');
      } else if (k === 37 && loc === '/index/loc2') {
        his.push('/index/loc1');
      }
    }
  }

Для тестов использую jest/enzyme.
Этот код делает следующее:
по стрелочками вправо / влево переключаются табы и меняется url.
Вопрос, может ли jest/enzyme отследить keydown и изменение url?
Буду благодарен за простой пример.
  • Вопрос задан
  • 501 просмотр
Пригласить эксперта
Ответы на вопрос 1
Torin_Asakura
@Torin_Asakura
Lead Architect
Jest
const map = {};
Window.addEventListener = jest.genMockFn().mockImpl((event, cb) => {
  map[event] = cb;
});

map.event(...args);

Enzyme
import { mount } from 'enzyme';
...
describe('Editor', function () {
  it('dispatch COMMAND_SAVE when command+s key pressesd', function () {
    const dispatchSpy = sinon.spy();
    dispatchSpy.withArgs(COMMAND_SAVE);

    // 1. use `mount` API for Full DOM Rendering
    const wrapper = mount(<Editor dispatch={dispatchSpy} />);

    // 2. find a DOM element with '.public-DraftEditor-content' classname
    const ed = wrapper.find('.public-DraftEditor-content');

    // 3. dispatch the 'keyDown' event with `simulate` API
    ed.simulate('keyDown', {
      keyCode: KeyCode.KEY_S,
      metaKey: false, // is IS_OSX=true, this should be true
      ctrlKey: true,
      altKey: false,
    });

    assert.equal(dispatchSpy.calledOnce, true);
    assert.equal(dispatchSpy.withArgs(COMMAND_SAVE).calledOnce, true);
  });
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы