J'ai un composant react (simplifié afin de démontrer le problème) :
class MyComponent extends Component {
handleNameInput = (value) => {
this.searchDish(value);
};
searchDish = (value) => {
//Do something
}
render() {
return(<div></div>)
}
}
Maintenant, je veux tester que handleNameInput()
appelle searchDish
avec la valeur fournie.
Pour ce faire, je voudrais créer une fonction fantaisie jest qui remplace la méthode des composants.
Voici mon cas d'essai jusqu'à présent :
it('handleNameInput', () => {
let wrapper = shallow(<MyComponent/>);
wrapper.searchDish = jest.fn();
wrapper.instance().handleNameInput('BoB');
expect(wrapper.searchDish).toBeCalledWith('BoB');
})
Mais tout ce que j'obtiens dans la console est SyntaxError
:
Erreur de syntaxe
at XMLHttpRequest.open (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:458:15) at run_xhr (node_modules/browser-request/index.js:215:7) at request (node_modules/browser-request/index.js:179:10) at DishAdmin._this.searchDish (src/main/react/components/DishAdmin.js:155:68) at DishAdmin._this.handleNameInput (src/main/react/components/DishAdmin.js:94:45) at Object.<anonymous> (src/main/react/tests/DishAdmin.test.js:122:24)
Ma question est donc la suivante : comment faire pour que les méthodes des composants soient correctement simulées avec l'enzyme ?
0 votes
Quelle est l'erreur de syntaxe ?
0 votes
Ajouté à la question :)
0 votes
Sans savoir précisément quelle est la source, il est impossible d'aider - je ne vois aucune erreur de syntaxe dans le code que vous avez posté.
0 votes
L'erreur de syntaxe vient de wrapper.searchDish = jest.fn() ; Après avoir modifié cette ligne, l'erreur n'apparaît plus, donc je suppose que la fonction fantaisie n'est pas assignée correctement. Mais je ne sais pas quelle est la bonne méthode, et si elle est disponible ou non. D'où la question suivante
0 votes
N'est-ce pas ?
searchDish
sur leinstance()
et non l'enveloppe ?4 votes
Je ne comprends pas pourquoi une fonction nommée
searchDish
est appelé ici. Il n'y a pas de méthode dans l'exemple avec ce nom. Comment sommes-nous passés desearchValue()
àsearchDish()
?0 votes
@flyingace J'ai modifié la question pour changer le nom de la méthode du composant de
searchValue
àsearchDish
. La modification est en attente d'un examen par les pairs maintenant. J'ai testé le code et, oui,searchValue
ne fonctionne pas.searchDish
fait. Il s'agit d'une erreur de frappe dans la description de l'OP. Je voulais changer tous lessearchDish
àsearchValue
mais j'ai fini par faire le contraire car c'est plus facile.0 votes
Mise à jour de la question pour refléter
searchDish()
vicesearchValue()
0 votes
Hmm où trouvez-vous
shallow
de ? c'est indéfini pour moi dans les tests de react-app