Je lance un peu pour trouver une solution sur la manière de tester cette fonction exportée avec Jest. J'ai importé dans mon fichier de test et essayé de le démarrer: P > import { scrollToError } from './utils';
describe('Utils', () => {
it('should scroll to error', () => {
const result = scrollToError();
expect(result).toBe(true); //added this just to force an error and got result as undefined
});
});
3 Réponses :
Le code asynchrone est testé un peu différemment dans la JEST: Test du code asynchrone . Vous pouvez aussi Prenez le contrôle sur les minuteries ou de la combiner avec le Manuel moqueur et remplacer jQuery lui-même. P> ScrolltoError () code> est une fonction asynchrone et vous ne pouvez pas l'invoquer et vous attendre à ce que le résultat soit là immédiatement. Vous devez attendre ce montant de MS (400 dans votre cas), avant de le tester. P>
Mais qu'en est-il de la jQuery .. J'essayais de trouver un moyen de se moquer ..
Comment utilisez-vous jQuery? p>
Je veux dire, avez-vous eu l'obtention de NPM ou de fil? Pour se moquer de nœud_modules, vous pouvez suivre ce lien: https://jestjs.io / Docs / fr / Manual-Mocks # MODING-NODE-MODULES P>
Sinon, vous devrez créer une simulation manuelle. Vous pouvez voir comment faire ici: https://jestjs.io/docs/fr/manual -Mocks p>
mise à jour: p>
Le moyen le plus simple est de le remplacer, c'est tout en réglant votre test à Vous pouvez simplement mettre quelque chose comme C'est la maquette la plus simple jamais, mais vous devrez créer les méthodes telles que Avoir une deuxième pensée ici et à la recherche de votre fonction, si vous vous moquez de JQuery, ce qui reste à tester? p>
Si vous vous moquez, vous testez si votre FN effectue les étapes que vous avez définies ici. Comme chèque si le jQuery fn a été appelé avec Ce type de test ne vous aide pas du tout, il ne s'agit que de vérifier s'il s'agit d'une ligne suivante par votre algorithme. Le problème ici, que vous pouvez faire des refactorings tels que la modification du nom de la classe code> error code> ou la méthode d'animation par d'autres améliorées. p>
Qu'est-ce que vous avez vraiment besoin de changer, si cela fait à la fin ce devrait faire. Affichant le div ou tout ce qui devrait être affiché. Si vous testez cela, quelle que soit la façon dont vous refactez votre code, le test vérifiera si la solution finale fonctionne toujours et que ce qui compte. P>
Était-je clair? L'anglais n'est pas ma langue maternelle, il peut être un peu déroutant p> avant-membres code> méthode. P>
fenêtre.jQuery = jest.fn (); code> p>
Animate code> et d'autres méthodes liées à JQuery. P>
.has-error code> classe ou si
animate code> a reçu les paramètres corrects. P>
La difficulté ici est de créer un manuel moqueur pour cela ... Je ne l'utilise pas de nœud_modules ...
J'ai finalement réussi à trouver une solution appropriée. J'ai écrit trois cas de test:
jest.useFakeTimers(); describe('utils', () => { afterEach(() => { document.body.innerHTML = ''; }); it('ScrollToError - should run the settimeout for 400 ms', () => { scrollToError(); expect(setTimeout).toHaveBeenCalledTimes(1); expect(setTimeout).toHaveBeenCalledWith(expect.any(Function), 400); }); it('ScrollToError - should scroll to error', () => { document.body.innerHTML = formStep1ErrorMock; window.setTimeout = fn => fn(); const result = scrollToError(); expect(result).toBe(true); }); it('ScrollToError - should do nothing as has no errors', () => { document.body.innerHTML = formStep1Mock; window.setTimeout = fn => fn(); const result = scrollToError(); expect(result).toBe(true); }); });