0

我有一个正在使用的组件'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() 事件“dayClick”不存在

如果我尝试模拟'click',则间谍返回false(因此永远不会调用该方法)。

我究竟做错了什么?

4

1 回答 1

2

Simulate 只支持 React 理解的事件

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

您应该在组件<div>内部模拟测试Day

于 2017-01-16T12:44:48.697 回答