开玩笑酶 reactJS - 无论 return 如何执行方法

jest enzyme reactJS - method executes regardless of return

我有以下方法要测试:

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

所以我写了一个 mock 函数,将它作为 prop 传递并想我会测试状态,如果函数被调用:

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

我做错了什么?

在你的测试中,你正在做: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) {
}