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

У меня есть следующий код:

class Dummy extends React.Component {
  constructor(props) {
    this.state = { field: '' }
  }

  componentDidMount() {
    PubSub.subscribe('event', () => {
      this.setState({ field: 'a' });
    });
  }
}

Я хочу убедиться, что при публикации event состояние устанавливается на a. Как мне добиться этого с помощью Jest with Enzyme?

1 Ответ

0 голосов
/ 31 августа 2018

PubSub предоставляет publish() и publishSync():

Вы можете использовать publishSync() или использовать поддельные таймеры с publish().


publishSync()

test('should subscribe to event', () => {
  const component = shallow(<Dummy />);
  expect(component.state('field')).toBe('');
  PubSub.publishSync('event');
  expect(component.state('field')).toBe('a');
});

publish() и Jest Таймеры Mocks :

test('should subscribe to event', () => {
  jest.useFakeTimers();  // wrap timer functions in mocks

  const component = shallow(<Dummy />);
  expect(component.state('field')).toBe('');

  PubSub.publish('event');
  jest.runAllTimers();  // run all timer callbacks

  expect(component.state('field')).toBe('a');
});

PubSub использует в своих тестах publishSync() и publish() с Sinon фальшивыми таймерами .

...