У меня есть класс компонентов React, на котором я пытаюсь протестировать поведение нажатия, но на самом деле я не могу заставить симуляцию работать. Вот класс компонентов:
class Navbar extends Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.state = {
isOpen: false
};
}
toggle() {
this.setState({
isOpen: !this.state.isOpen
});
}
render() {
return (
<NavbarWrapper expand={this.props.expand}>
<NavbarBrand>{logo}</NavbarBrand>
<NavbarToggler onClick={this.toggle} collapsed={!this.state.isOpen}>
<NavbarIconBar className="top-bar" />
<NavbarIconBar className="middle-bar" />
<NavbarIconBar className="bottom-bar" />
</NavbarToggler>
<NavbarCollapsibleContent isOpen={this.state.isOpen} navbar>
{this.props.children}
</NavbarCollapsibleContent>
</NavbarWrapper>
);
}
}
А вот и тест:
const wrapper = shallow(<Navbar {...props} />);
const toggler = wrapper.find(NavbarToggler);
const content = wrapper.find(NavbarCollapsibleContent);
// initial state
expect(content.props().isOpen).toBe(false);
// click to expand (i.e. NOT collapse)
toggler.simulate("click");
expect(content.props().isOpen).toBe(true);
// click to collapse
toggler.simulate("click");
expect(content.props().isOpen).toBe(false);
Поскольку начальное состояние атрибута isOpen
компонента - false
, первый оператор ожидаемого выполнения выполняется успешно. Однако второй тест завершается неудачно с выводом на консоль:
● Navbar › should toggle 'NavbarCollapsibleContent's 'isOpen' state when clicking on 'NavbarToggler'
expect(received).toBe(expected) // Object.is equality
Expected: true
Received: false
, что, по-видимому, означает, что симуляция не сработала. Что я здесь не так делаю?