jest酶reactJS - 无论返回

时间:2017-01-12 18:22:30

标签: reactjs jestjs enzyme

我想测试以下方法:

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,所以我很确定该方法不会退出渲染函数。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在您的测试中,您正在执行:sidebar.instance().handleDayClick(e, day, true);

而handleDayClick正在使用disabled

对对象进行解构
handleDayClick(e, day, {disabled}) {
}

尝试按照以下方式调用它:sidebar.instance().handleDayClick(e, day, { disabled: true });

将来您可能希望使用Flow之类的工具来防止错误https://flowtype.org/docs/react.html

你可以通过做这样的事情来提前检测到它:

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