web-dev-qa-db-fra.com

Blague nettoyer après tous les tests ont été exécutés

Est-il possible dans Jest d'exécuter des tâches de nettoyage ou de démontage qui s'exécutent une fois tous les autres tests terminés? Similaire à la façon dont setupFiles permet de configurer des tâches après la fin de tout test. Des points bonus si cela peut également fonctionner, que le test contienne des erreurs.

Placer afterAll(() => {}) au niveau supérieur d'un fichier (en dehors de toute fonction de description) ne semble s'exécuter qu'après la fin des tests de ce fichier particulier.

Le cas d'utilisation est que j'ai de nombreux fichiers de test qui créeront des utilisateurs dans une base de données de développement, et je ne veux pas rendre chaque fichier de test responsable du nettoyage et de la suppression de l'utilisateur par la suite. Des erreurs peuvent également se produire lors de l'écriture des tests, donc si le nettoyage se produit indépendamment des erreurs qui seraient préférables.

20
dcochran

Il y a un crochet frère à setupFiles qui se déclenchera aussi avant chaque suite de tests mais juste après que votre lanceur de test (par défaut Jasmine2) ait initialisé l'environnement global.

Cela s'appelle setupFilesAfterEnv . Utilisez-le comme ceci:

{
    "setupFilesAfterEnv": ["<rootDir>/setup.js"]
}

Exemple setup.js :

beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));

setup.js n'a pas besoin d'exporter quoi que ce soit. Il sera exécuté avant chaque suite de tests (chaque fichier de test). Étant donné que le lanceur de test est déjà initialisé, les fonctions globales telles que beforeAll et afterAll sont dans la portée, tout comme dans votre fichier de test normal, vous pouvez donc les appeler comme vous le souhaitez.

setupTestFrameworkScriptFile firing beforeAll and afterAll

19
Michał Pierzchała

Dans jest.config.js:

module.exports = {
    // ...
    setupFilesAfterEnv: [
        "./test/setup.js",
        // can have more setup files here
    ],
}

Dans ./test/setup.js:

afterAll(() => {
    // Cleanup logic
});

Remarque:

2
Tho

Il semble qu'il existe une fonctionnalité appelée reporter qui fait exactement cela:

1
rivanov