У меня неожиданный результат при выполнении теста в 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();