проблема возникает из-за объявления метода onClick
, если вы объявите свою функцию следующим образом
onClick() {}
вместо
onClick = () => {}
ваш тест должен работать, потому что onClick
будет присутствовать в объекте Parent.prototype
, обратите внимание, что ключевое слово this
в методе onClick
больше не будет ссылаться на экземпляр класса.
Если вам нужно использовать функцию стрелки (для получения правильногозначение this
), вы можете изменить свой тест:
test("check callback fire", () => {
let mockFn = jest.fn();
let wrapper = shallow(<Parent />);
wrapper.instance().onClick = mockFn;
wrapper.find('Child').props().handleClick();
expect(mockFn).toHaveBeenCalled();
});
Использование onClick = () => {}
в классе Parent
не добавит свойство к Parent.prototype
, фактически он объявит переменную экземпляравот так:
class Parent {
constructor() {
super();
this.onClick = () => {}
}
}
Кстати, присутствие Fragment
внутри вашего render
метода кажется бесполезным, вы можете удалить его
render() {
return <Child handleClick={this.onClick} />;
}