Проверить, если функция вызывается реагировать и ферментов
Я пытаюсь протестировать один из методов в моем компоненте react. Он вызывается после нажатия кнопки, поэтому у меня есть моделирование на месте с энзимом
it('clone should call handleCloneClick when clicked', () => {
const cloneButton = wrapper.find('#clone-btn');
cloneButton.simulate('click');
});
Мой компонентный метод здесь:
_handleCloneClick(event) {
event.preventDefault();
event.stopPropagation();
this.props.handleClone(this.props.user.id);
}
_handleCloneClick вызывается, когда пользователь нажимает на кнопку, которая находится в симуляции, как я могу проверить, что его успешно вызвали?
1 ответ:
Есть два варианта, либо вы должны шпионить за
_handleCloneClick
прототипа компонента, прежде чем визуализировать компонент:export default class cloneButton extends Component { constructor(...args) { super(...args); this. _handleCloneClick = this. _handleCloneClick.bind(this); } _handleCloneClick() { event.preventDefault(); event.stopPropagation(); this.props.handleClone(this.props.user.id); } render() { return (<button onClick={this. _handleCloneClick}>Clone</button>); } }
И в вашем тесте:
it('clone should call handleCloneClick when clicked', () => { sinon.spy(cloneButton.prototype, '_handleCloneClick'); const wrapper = mount(<cloneButton/>); wrapper.find('#clone-btn').simulate('click'); expect(spy).toHaveBeenCalled() //adept assertion to the tool you use });
Или, вы можете попытаться установить шпиона после рендеринга компонента и вызвать
wrapper.update()
после этого:it('clone should call handleCloneClick when clicked', () => { const wrapper = mount(<cloneButton/>); sinon.spy(wrapper.instance(), "_handleCloneClick"); wrapper.update(); wrapper.find('#clone-btn').simulate('click'); expect(spy).toHaveBeenCalled() //adept assertion to the tool you use });