我有一个使用'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);
};然后将其传递给as 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()事件'dayClick‘不存在
如果我尝试模拟'click',间谍将返回false (因此该方法永远不会被调用)。
我做错了什么?
发布于 2017-01-16 12:44:48
模拟只支持反应明白的事件
(https://facebook.github.io/react/docs/test-utils.html#simulate)
这就是为什么在dayClick上出现错误的原因。
为了模拟点击,您应该深入到反作用日选择器中,并找出最终分配给哪个DOM元素的onClick道具。然后模拟点击。
编辑--这是包含获取单击处理程序的DOM节点的组件。
https://github.com/gpbl/react-day-picker/blob/master/src/Day.js
您应该在<div>组件中模拟测试。
https://stackoverflow.com/questions/41675414
复制相似问题