2017-01-12 6 views
1

я следующий метод, который я хочу, чтобы тест:шутя фермент reactJS - метод выполняется независимо от возвращения

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); 
    }; 

Так что я написал макет функции, передал его в качестве опоры и полагал, что я бы проверить состояние и, если функция вызвана:

it('handleDayClick() should NOT set state.selectedDay, call props.dateClick when disabled',() => { 
    let mockDateClick = jest.fn(); 
    const sidebar = shallow(<Sidebar dateClick={mockDateClick}/>); 
    let e = 'whatever'; 
    let day = 'tomorrow'; 

    sidebar.instance().handleDayClick(e, day, true); 
    expect(sidebar.state().selectedDay).toBe(undefined); 
    expect(mockDateClick).toNotHaveBeenCalled(); 
    }); 

Дело в том, что state(). selectedDay устанавливается на завтра. Значение перед вызовом метода равно 2017-01-12T18:18:13.216Z, поэтому я уверен, что метод не выходит из функции рендеринга.

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

ответ

0

В тесте, вы делаете: sidebar.instance().handleDayClick(e, day, true);

в то время как handleDayClick является уничтожение того, объект с disabled ключа

handleDayClick(e, day, {disabled}) { 
} 

Try назвать это как этот: sidebar.instance().handleDayClick(e, day, { disabled: true });

В будущем вы возможно, захотят использовать такие инструменты, как Flow для предотвращения ошибок https://flowtype.org/docs/react.html

у вас есть смог обнаружить это раньше, выполнив примерно следующее:

handleDayClick(e: {}, day: string, {disabled}: boolean) { 
}