#1 Utilisation de Jest
Voici comment j'utilise la fonction de rappel de jest mock pour tester l'événement de clic.
import React from 'react';
import { shallow } from 'enzyme';
import Button from './Button';
describe('Test Button component', () => {
it('Test click event', () => {
const mockCallBack = jest.fn();
const button = shallow((<Button onClick={mockCallBack}>Ok!</Button>));
button.find('button').simulate('click');
expect(mockCallBack.mock.calls.length).toEqual(1);
});
});
J'utilise également un module appelé enzyme Enzyme est un utilitaire de test qui facilite l'évaluation et la sélection de vos composants React.
#2 Utilisation de Sinon
Vous pouvez également utiliser un autre module appelé sinon qui est un test autonome de spies, stubs et mocks pour JavaScript. Voici à quoi il ressemble
import React from 'react';
import { shallow } from 'enzyme';
import sinon from 'sinon';
import Button from './Button';
describe('Test Button component', () => {
it('simulates click events', () => {
const mockCallBack = sinon.spy();
const button = shallow((<Button onClick={mockCallBack}>Ok!</Button>));
button.find('button').simulate('click');
expect(mockCallBack).toHaveProperty('callCount', 1);
});
});
#3 Utiliser votre propre espion
Vous pouvez enfin faire votre propre espion naïf
function MySpy() {
this.calls = 0;
}
MySpy.prototype.fn = function () {
return () => this.calls++;
}
it('Test Button component', () => {
const mySpy = new MySpy();
const mockCallBack = mySpy.fn();
const button = shallow((<Button onClick={mockCallBack}>Ok!</Button>));
button.find('button').simulate('click');
expect(mySpy.calls).toEqual(1);
});
0 votes
Comment savez-vous que ça n'a rien fait ? Que vérifiez-vous ensuite pour savoir si le bouton a été cliqué ?
1 votes
Bonne question. Je m'attends à ce que le champ d'erreur apparaisse : const field = pageMounted.find('#notification') ; expect(field.length).toBe(1) ;
0 votes
Hrm. Avez-vous ajouté un
console.warn
à la fonction qui exécute onClick pour voir si elle se déclenche dans la console Jest ?0 votes
Pourriez-vous ajouter le code pour le
MyCoolPage
sinon il est difficile de déterminer quel est le problème réel.1 votes
Merci pour les conseils. J'ai trouvé mon problème, grâce à vos questions. J'ai essentiellement fait un petit test avec un simple bouton et cela a fonctionné : MyCoolPage = ( <button type="submit" id="cool_button" onClick={() => { console.warn('I was clicked');}>Cool Button</button> ) ; J'ai ensuite réalisé que mon bouton appartenait au redux-form, donc il n'avait pas onClick, mais onSubmit à la place, donc ajouter button.simulate('submit') ; a résolu le problème. Merci encore pour vos commentaires !