我想用酶測試我的React組件。該組件具有這種渲染方法:在酶不能更新狀態使用實例()。狀態和更新()
render() {
let modal = null;
let modalTitle = this.state.isEditing ? 'Edit Event' : 'Add Event';
if (this.state.showModal) {
modal = (<div className="event-modal">
<Modal show={this.state.showModal} onHide={this.closeModal}>
...
</Modal>
</div>);
}
return (
<div style={{height: '500px', width: '1000px'}}>
<BigCalendar
events={this.props.events}
startAccessor='startDate'
endAccessor='endDate'
onSelectSlot={this.onDayClick}
selectable={true}
onSelectEvent={this.onEventClick}
/>
{modal}
</div>
);
}
在我的測試情況下,我想驗證模式時顯示的ShowModal = true,並且酶建議您使用實例()來獲取您的組件中進行詳細正確的狀態測試,所以我嘗試使用實例(),然後更新(),但它沒有奏效。我最後工作的測試用例是使用setState(),如果可能,酶建議不要使用。這是我的測試案例:
it('render should display modal if showModal is true',() => {
const calendar = shallow(<CalendarPres events={[]}/>);
//The commented out code does not work, but I'm not sure why
//calendar.instance().state.showModal = true;
//calendar.update();
calendar.setState({showModal: true});
expect(calendar.find('.event-modal').exists()).toBe(true);
});
的setState()的作品,但使用實例(),然後更新()沒有。爲什麼update()不能正確地重新渲染我的組件?
爲的setState(),在那裏他們建議您使用實例()的酶文檔: https://github.com/airbnb/enzyme/blob/master/docs/api/ShallowWrapper/setState.md 酶文檔例如:http://airbnb.io/enzyme/docs/api/ShallowWrapper/instance.html –
感謝您的補充。 – prosti