开玩笑酶 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) {
}
我有以下方法要测试:
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) {
}