enzymejs / enzymejs/enzyme

Looks like `setState` updates children props only when root.

Open
#2,149 6 comments 1 reaction 1 assignee Claimed by @ljharb View on GitHub
API: mount bug
Dominant language
JavaScript
Stars
19.8k
Forks
2k
PR merge metrics
No merged PRs in 30d

Description

### Current behavior

```typescript
import * as React from 'react'
import { mount } from 'enzyme'

const Bar = ({bar}) =>

I am {bar}

class Foo extends React.Component {
state = {
foo: 'rachid'
}

render() {
return
}
}

class Parent extends React.Component {
render() {
return

{this.props.children}

}
}

it('Passes props when root', () => {
const wrapper = mount();
wrapper.setState({foo: 'hamid'});
expect(wrapper.state('foo')).toEqual('hamid');
expect(wrapper.find(Bar).prop('bar')).toEqual('hamid');
});

it('Passes props when non root', () => {
const wrapper = mount();
const fooWrapper = wrapper.find(Foo);
fooWrapper.setState({foo: 'hamid'});
expect(fooWrapper.state('foo')).toEqual('hamid');
expect(fooWrapper.find(Bar).prop('bar')).toEqual('hamid'); // This fails
});
```

### Expected behavior
I expect `setState` to have the same behavior as when the component is root.

### Your environment
Linux

#### API

- [ ] shallow
- [x] mount
- [ ] render

#### Version

| library | version
| ------------------- | -------
| enzyme | ^3.8.0
| react | ^16.7.0
| react-dom |
| react-test-renderer |
| adapter (below) | ^1.8.0

#### Adapter

- [x] enzyme-adapter-react-16
- [ ] enzyme-adapter-react-16.3
- [ ] enzyme-adapter-react-16.2
- [ ] enzyme-adapter-react-16.1
- [ ] enzyme-adapter-react-15
- [ ] enzyme-adapter-react-15.4
- [ ] enzyme-adapter-react-14
- [ ] enzyme-adapter-react-13
- [ ] enzyme-adapter-react-helper
- [ ] others ( )

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.