Given a React structure like this:
<A>
<B>
<div>
<input>
{ props.focused && <p>focused!</p> }
</div>
</B>
</A>
In <A>, in componentWillMount, we've set DOM (non-React) event listeners window for focus and click.
The idea is, when the input is clicked or focused, we call setState in <A>, setting that the input is focused. Conversely, if somewhere on the document that is outside the input gets clicked/focused, we set focused to false.
In <A>'s render, we render <B focused={this.state.focused} />.
We're trying to simulate clicking on the input. Since it's not a React event, we can't use Simulate.
Basically, we want our test to look something like this pseudocode:
wrapper = mount(<A>)
input = wrapper.find(input)
input.click()
assert(wrapper.text().contains('focused!'))
Using Enzyme, how can we access the real, underlying DOM node <input>, so we can send it a click() event?
Things we've tried:
- Enzyme
mount(<A>), access input by className and/or ref: can't find any way to get the actual DOM node - Enzyme static rendering (
render(<A>)) doesn't work for us because then we're only dealing with a static DOM structure, with no events - Using JSDom
document=> doesn't seem to be a real document, didn't go very far down this path
Aucun commentaire:
Enregistrer un commentaire