У меня есть следующий код, который устанавливает пользовательский обработчик для каждого элемента (который может быть button
или li
) щелчком мыши.
componentWillReceiveProps(nextProps) {
this._setCallbackToItemLinks(nextProps);
}
_setCallbackToItemLinks(props) {
const items = props && props.items;
items.forEach(item => {
item.links.forEach(link => {
this._setCallbackToLink(link);
});
});
}
_setCallbackToLink(link) {
link.onClickFromProps = link.onClick;
link.onClick = e => this._onItemClick(e, link.onClickFromProps);
}
onItemClick(e, onClickFromProps) {
console.log("Custom click event handler called");
if (onClickFromProps)
onClickFromProps(e);
}
Я хочу провести модульное тестирование вышеуказанной функциональности, используяШутка.
const component= mount(<Comp />);
const mock2 = jest.fn();
component.setProps({ items: [{links: [{ name: 'Test', key: 'Test', url: 'Test', onClick: mock2 }]}] });
const link= component.find('.nav-link');
navLink.simulate('click');
expect(mock2.mock.calls.length).toBe(1);
тест проходит успешно, однако я не получаю оператор console.log
, написанный в методе onItemClick
.Когда я пытаюсь отладить этот тест, он даже не входит в onItemClick
после вызова симуляции.
navLink
показывает тег <a>
.
когда я регистрируюсь navLink.props().onClick
, это показывает [Function: bound]