开玩笑 instance().simulate('dayClick');类型错误不存在
jest instace().simulate('dayClick'); TypeError does not exist
我有一个组件正在使用 'react-day-picker'
。
该组件有一个名为 handleDayClick
的方法:
handleDayClick(e, day, {disabled}) {
if (disabled) {
// Do not update the state if the day is disabled
return;
}
this.setState({ selectedDay: day });
this.props.dateClick(day);
};
然后作为 onDayClick 属性传递给:
<DayPicker
onDayClick={ this.handleDayClick.bind(this) }
selectedDays={ day => DateUtils.isSameDay(day, this.state.selectedDay) }
disabledDays={ isWeekend }
/>
现在我想写一个测试,模拟一个日期的点击事件,看它是否触发正确的方法:
it('DayPicker should call handleDayClick on click', () => {
const sidebar = mount(<Sidebar />);
let spy = sinon.spy(sidebar.instance(), 'handleDayClick');
sidebar.update();
sidebar.find(DayPicker).simulate('dayClick');
expect(spy.called).toBe(true);
});
问题在于 .simulate() 无法识别 'dayClick'
。我在控制台中收到以下错误:
TypeError: ReactWrapper::simulate() event 'dayClick' does not exist
如果我尝试模拟 'click'
,间谍 returns false
(因此永远不会调用该方法)。
我做错了什么?
Simulate only supports events that React understands
(https://facebook.github.io/react/docs/test-utils.html#simulate)
这就是您在 dayClick 上收到错误的原因。
要模拟点击,您应该深入研究 react-day-picker 并找出 onClick 道具最终分配给哪个 DOM 元素。然后模拟点击那个。
编辑 - 这是包含获取点击处理程序的 DOM 节点的组件
https://github.com/gpbl/react-day-picker/blob/master/src/Day.js
您应该在 Day
组件
内的 <div>
上模拟测试
我有一个组件正在使用 'react-day-picker'
。
该组件有一个名为 handleDayClick
的方法:
handleDayClick(e, day, {disabled}) {
if (disabled) {
// Do not update the state if the day is disabled
return;
}
this.setState({ selectedDay: day });
this.props.dateClick(day);
};
然后作为 onDayClick 属性传递给:
<DayPicker
onDayClick={ this.handleDayClick.bind(this) }
selectedDays={ day => DateUtils.isSameDay(day, this.state.selectedDay) }
disabledDays={ isWeekend }
/>
现在我想写一个测试,模拟一个日期的点击事件,看它是否触发正确的方法:
it('DayPicker should call handleDayClick on click', () => {
const sidebar = mount(<Sidebar />);
let spy = sinon.spy(sidebar.instance(), 'handleDayClick');
sidebar.update();
sidebar.find(DayPicker).simulate('dayClick');
expect(spy.called).toBe(true);
});
问题在于 .simulate() 无法识别 'dayClick'
。我在控制台中收到以下错误:
TypeError: ReactWrapper::simulate() event 'dayClick' does not exist
如果我尝试模拟 'click'
,间谍 returns false
(因此永远不会调用该方法)。
我做错了什么?
Simulate only supports events that React understands
(https://facebook.github.io/react/docs/test-utils.html#simulate)
这就是您在 dayClick 上收到错误的原因。
要模拟点击,您应该深入研究 react-day-picker 并找出 onClick 道具最终分配给哪个 DOM 元素。然后模拟点击那个。
编辑 - 这是包含获取点击处理程序的 DOM 节点的组件
https://github.com/gpbl/react-day-picker/blob/master/src/Day.js
您应该在 Day
组件
<div>
上模拟测试