A method to invoke setState()
on the root component instance, similar to how you might in the
methods of the component, and re-renders. This method is useful for testing your component
in hard-to-achieve states, however should be used sparingly. If possible, you should utilize
your component's external API (which is often accessible via .instance()
) in order
to get it into whatever state you want to test, in order to be as accurate of a test as possible.
This is not always practical, however.
NOTE: Prior to v3.8.0 of enzyme, can only be called on a wrapper instance that is also the root instance.
nextState
(Object
): An object containing new state to merge in with the current statecallback
(Function
[optional]): If provided, the callback function will be executed once setState has completed
ReactWrapper
: Returns itself.
class Foo extends React.Component {
constructor(props) {
super(props);
this.state = { name: 'foo' };
}
render() {
const { name } = this.state;
return (
<div className={name} />
);
}
}
const wrapper = mount(<Foo />);
expect(wrapper.find('.foo')).to.have.lengthOf(1);
expect(wrapper.find('.bar')).to.have.lengthOf(0);
wrapper.setState({ name: 'bar' });
expect(wrapper.find('.foo')).to.have.lengthOf(0);
expect(wrapper.find('.bar')).to.have.lengthOf(1);