2017-10-18 9 views
3

J'utilise Jest and Enzyme pour tester un composant Form, et j'ai du mal à faire fonctionner la simulation de clic. Pour référence: Button est un bouton de rebass style et existe sous la forme comme ceci:enzyme simuler 'click' ne fonctionne pas quand il le faut

<Button 
    type="reset" 
    disabled={pristine || submitting} 
    onClick={() => onClose(dirty)} 
> 

est ici le test qui est défaillant:

it('should handle the onClose event',() => { 
     const onCloseSpy = jest.fn(); 
     const renderedComponent = mount(renderFormUtil({ onClose: onCloseSpy })); 
     expect(onCloseSpy).not.toHaveBeenCalled(); 
     console.log(renderedComponent.find(Form).props().onClose); 
     renderedComponent 
     .find(Button) 
     .first() 
     .simulate('click'); 
    expect(onCloseSpy).toHaveBeenCalled(); 
    }); 

Que faut-il noter ici, est que si je remplace la simuler la ligne avec ce qui suit:

renderedComponent 
    .find(Button) 
    .first() 
    .props() 
    .onClick(); 

puis soudainement mon test passe. Comment est-ce possible? Si le prop onClick est correct, cela ne signifie-t-il pas que l'événement click n'appelle pas le prop correctement?

+0

Pourquoi utilisez-vous '.Find (ButtonSubmit)' dans un cas et '.Find (Button)' dans l'autre? Je ne sais pas à quoi ressemble Button, mais je ne m'attendrais pas au même résultat puisque vous testez deux composants différents. –

+0

Désolé, ce sont le même composant-- Je voulais me débarrasser du mot Soumettre dans le nom du composant, par simplification –

Répondre

0

Il n'est pas clair si les deux .find sélectionnent les mêmes composants car chacun utilise un sélecteur différent. Combiné avec cela, vous utilisez .first() dont il n'est pas possible d'être sûr de la commande avec l'exemple de code.
Vous pouvez essayer d'utiliser un sélecteur plus spécifique, en évitant d'utiliser .first() et en obtenant le composant souhaité avec .find. Pour cela, vous pouvez ajouter un id pour une ButtonSubmit spécifique et utiliser un sélecteur comme:
.find('ButtonSubmit[id="foo"]')

+0

Désolé, je viens d'éditer la question - Il ne devrait pas y avoir un ButtonSubmit. Je me suis débarrassé de cette partie du nom afin de poser cette question pour que ce soit plus simple, mais apparemment, je n'ai pas fait un travail minutieux. Ils devraient choisir le même élément, AFAIK. –