шпионская функция не вызывается наряду с шпионским обещанием с использованием шутки и энзима - PullRequest
0 голосов
/ 23 октября 2018

У меня неожиданный результат при выполнении теста в Jest с использованием Enzyme.

Стоит сказать, что я изменил обещание шпиона для простой шпионской функции (jest.fn ()), поэтому оба шпиона были вызваны успешно, поэтомуЯ думаю, что historySpy.push шпион не вызван, потому что он не работает с обещанием шпиона.

Мой компонент LoginPage.js

import React from 'react';
import { withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
import { startLogin as startLoginAction } from '../actions/auth';
import * as LoginPageStyles from '../styles/components/LoginPage';

export const LoginPage = ({ history, startLogin }) => {
  const onClick = async e => {
    await startLogin(e.target.dataset.provider);
    history.push('/');
  };

  return (
    <LoginPageStyles.Container>
      <LoginPageStyles.Box>
        <LoginPageStyles.Title>Denuncia Perú App</LoginPageStyles.Title>
        <p>Haz tu denuncia, no calles!.</p>
        <LoginPageStyles.ButtonGoogle onClick={onClick} data-provider="google">
          Login con Google
        </LoginPageStyles.ButtonGoogle>
        <LoginPageStyles.ButtonFacebook onClick={onClick} data-provider="facebook">
          Login con Facebook
        </LoginPageStyles.ButtonFacebook>
      </LoginPageStyles.Box>
    </LoginPageStyles.Container>
  );
};


const mapDispatchToProps = dispatch => ({
  startLogin: provider => dispatch(startLoginAction(provider)),
});

export default withRouter(
  connect(
    null,
    mapDispatchToProps
  )(LoginPage)
)

Мой тест

import React from 'react';
import { mount, render } from 'enzyme';
import { LoginPage } from '../../components/LoginPage';

test('should call startLogin with facebook provider when clicking facebook button', done => {
  const historySpy = {
    push: jest.fn(),
  };
  const startLoginSpy = jest.fn(() => Promise.resolve('done'));

  const component = mount(<LoginPage startLogin={startLoginSpy} history={historySpy} />);
  component.find('button[data-provider="facebook"]').simulate('click');
  expect(startLoginSpy).toHaveBeenCalledWith('facebook'); // it's called successfuly.
  done();
  expect(historySpy.push).toHaveBeenCalled();
  component.unmount(); // it isn't called, why ?
});

Результаты

  • вызывается startLoginSpy.
  • historySpy не вызывается.

Вопрос

Кто-нибудь знает, почему он не вызывается?

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