J'essaie Jest/Enzyme et j'ai du mal avec un exemple simple que j'essaie de créer.
J'ai un petit composant avec une entrée qui devrait mettre à jour le texte d'un DIV. Je veux écrire un test prouvant que le DIV a été mis à jour.
Mon test est simplement le suivant:
const app = shallow(<App {...state} />);
const input = app.find('input');
input.simulate('keyDown', {keyCode: 72});
input.simulate('keyDown', {keyCode: 73});
input.simulate('change', {target: input});
expect(app.find('[test="mirror"]').text()).toEqual('hi');
Je sais que l'entrée renvoie en fait un ShallowWrapper
. Vous pouvez voir dans mon composant ci-dessous, je mets à jour l'état en regardant e.target.value
. Existe-t-il un moyen de passer le nœud DOM réel à ma simulation de change
? La simulation du keyDown mettra-t-elle réellement à jour la valeur d'entrée? Ou dois-je le faire d'une manière différente?
import React from 'react'
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
mirror: ''
};
this.updateMirror = this.updateMirror.bind(this);
}
updateMirror(e) {
let val = e.target.value;
this.setState((prevState, props) => {
return {
mirror: val
};
});
}
render() {
return <div>
<div><input type="text" onChange={this.updateMirror} /></div>
<div test="mirror">{this.state.mirror}</div>
</div>
}
}
export default App
Essayez quelque chose comme ceci:
const wrapper = shallow(<App {...state} />);
wrapper.find('input').simulate('change', {target: {value: 'Your new Value'}});
expect(wrapper.state('mirror')).toBe('Your new Value');