У меня есть компонент со следующими реквизитами и методом:
class OrderDish extends Component {
static propTypes = {
order: React.PropTypes.object.isRequired,
addCommentToOrder: React.PropTypes.func,
};
handleCommentChange = (event) => {
this.props.addCommentToOrder(event.target.value, this.props.order, false);
};
render() {
const { order, canOrder } = this.props;
return (
<div className="Order-dish">
<TextField
className='Order-dish-comment'
ref="comment"
id={order.entry.type}
value={order.comment ? order.comment : ''}
onChange={this.handleCommentChange}
fullWidth
onKeyDown={this.handleKeyPress}
disabled={!canOrder}
/>
</div>
)
}
}
export default OrderDish;
Теперь я хочу проверить, что функция handleCommentChange
вызывается с правильными аргументами, когда событие onChange
срабатывает в TextField
.
У меня есть отдельный тест для самого метода, который работает так, как ожидалось:
it('handleCommentChange should call addCommentToOrder passing event.target.value, this.props.order, false', () => {
const mockKeyPressFN = jest.fn((input) => {return input});
let orderDish = shallow(<OrderDish order={mockOrder} addCommentToOrder={mockKeyPressFN}/>);
orderDish.instance().handleCommentChange({key: 'Enter', target: {value: 'mock'}});
expect(mockKeyPressFN.mock.calls[0]).toContainEqual("mock", {"entry": {"name": "blah", "tag": "MAIN", "type": "bleh"}, "price": 5.44}, false);
});
Теперь, когда я пытаюсь сделать то же самое с simulate (передайте макет объект, посмотрите, вызывается ли функция):
it('TextField should call handleCommentChange onChange', ()=> {
const mockKeyPressFN = jest.fn();
let orderDish = shallow(<OrderDish order={mockOrder} addCommentToOrder={mockKeyPressFN}/>);
let textField = orderDish.find('TextField');
let event = {key: 'Enter', target: {value: 'mock'}};
textField.simulate('change',[event]);
expect(mockKeyPressFN.mock.calls.length).toBe(1);
});
Я получил:
Невозможно прочитать значение свойства undefined
Итак, я предполагаю, что мой объект event
неправильно передается функции .simulate
?
Что я делаю не так?