我想测试以下方法:
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 :(得分: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) {
}