Как выполнить модульное тестирование компонента с созданием нового события в конструкторе? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть компонент, который создает новое событие, которое отправляется при обновлении компонента.

 export class FullScreenButton extends Component {
  /**
   * @constructor
   * Instanciates a new Event called resize and binds the current context to the handleClick method.
   */
  constructor() {
    super();
    this.handleClick = this.handleClick.bind(this);
    this.event = new Event('resize')
  }

  /**
   * If the component was updated then dispatches the resize event.
   * @param {Object} prevProps - Previous state of the props.
   */
  componentDidUpdate(prevProps) {
    if (prevProps !== this.props) {
      window.dispatchEvent(this.event);
    }
  }
  ...
}

Однако в модульном тесте при использовании фермента для установки компонента он показывает мне эту ошибку:

1) Testing FullScreenButton Component
       Should alter the state and css on click:
     ReferenceError: Event is not defined

Чего мне не хватает? Спасибо за помощь в продвижении!

Редактировать: мой тест выглядит так:

import React from 'react';
import { expect } from 'chai';
import { mount } from 'enzyme';

import { FullScreenButton } from '../../../../../src/screens/flowConstructor/components/toolsMenu/FullScreenButton';

describe.only('Testing FullScreenButton Component', () => {
  it('Should alter the state and css on click', (done) => {
    const wrapper = mount(<FullScreenButton />);
    wrapper.setProps({
      toggleFullScreen: (fullscreen) => {
        expect(fullscreen).to.equal(false);
      }
    });


    expect(wrapper.find('button').hasClass('gof-icon-full-screen')).to.equal(true);
    wrapper.find('button').simulate('click');
    expect(wrapper.find('button').hasClass('gof-icon-full-windowed')).to.equal(true);
    done();
  });
});

Обновление: найдено рабочее решение. Вот обновленный тест:

describe.only('Testing FullScreenButton Component', () => {
  before(() => {
    global.Event = class {
      constructor(event) {
        console.log(event);
      }
    };

    global.window.dispatchEvent = (event) => {
      console.log(event)
    };
  });

  it('Should alter the state and css on click', (done) => {
    const wrapper = mount(<FullScreenButton />);
    wrapper.setProps({
      toggleFullScreen: () => {},
      fullScreen: false,
    });

    expect(wrapper.find('span').hasClass('gof-icon-full-screen')).to.equal(true);
    wrapper.setProps({
      fullScreen: true,
    });
    expect()
    expect(wrapper.find('span').hasClass('gof-icon-windowed')).to.equal(true);
    done();
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...