2017-01-16 11 views
0

У меня есть компонент, который использует 'react-day-picker'.jest instace(). Имитировать ('dayClick'); TypeError не существует

Этот компонент имеет метод, называемый 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); 
    }); 

Задача lem с этим является то, что .simulate() не распознает 'dayClick'. Я получаю следующее сообщение об ошибке в консоли:

TypeError: ReactWrapper::simulate() event 'dayClick' does not exist

Если я пытаюсь моделировать 'click' вместо этого, шпион возвращается false (поэтому метод никогда не вызывается).

Что я делаю неправильно?

ответ

1

Simulate only supports events that React understands

(https://facebook.github.io/react/docs/test-utils.html#simulate)

Вот почему вы получаете вашу ошибку на dayClick.

Чтобы имитировать щелчок, вы должны погрузиться в блок выбора времени и узнать, какой элемент DOM в конечном итоге получает привязка onClick. Затем имитируйте щелчок.


Edit - это компонент, который содержит узел DOM, который получает обработчик щелчка

https://github.com/gpbl/react-day-picker/blob/master/src/Day.js

Вы должны смотреть, чтобы имитировать тест на <div> внутри Day компонента

+1

Correct , класс div - .DayPicker-Day для разрешенных div. Итак: sidebar.find ('DayPicker-Day'). First(). Simulate ('click'); решили проблему. Спасибо –