Comment réutiliser beforeEach / afterEach dans Jasmine JS?

Lors de l'écriture de tests avec JasmineJS, j'ai beaucoup de tests qui ont un code beforeEach/afterEach similaire.

Existe-t-il un moyen d'implémenter un modèle d'héritage en utilisant des suites de test JasmineJS?

Je peux regrouper tous les tests en un seul describe mais dans ce cas, je terminerai par un seul énorme fichier JS contenant tous les tests.

Je voudrais diviser les tests pour chaque page.

Voici un exemple:

describe('Services Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/services')
    })

    if('Some test for services page', function() {})

    afterEach(function() {
        logout()
    })

})


describe('Administrators Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/administrators')
    })

    if('Some test for administrators page', function() {})

    afterEach(function() {
        logout()
    })

})
34
demandé sur Adi Roiban 2013-06-26 14:40:20

4 réponses

Je pense que cela est partiellement examiné dans cet article de blog et aussi répondu ici mais j'ajoute une réponse adaptée à votre exemple:

Code Réutilisable:

function sharedSetup(startPage) {
    beforeEach(function() {
        login_as_admin();
        browser().navigateTo(startPage);
    });

    afterEach(function() {
        logout();
    });
};

Comment l'utiliser:

describe('Services Page', function() {
    sharedSetup('/services');

    it('Some test for services page', function() {});
});

describe('Administrators Page', function() {
    sharedSetup('/administrators');

    it('Some test for administrators page', function() {});
});
30
répondu Leo Gallucci 2017-05-23 12:10:38

Si vous voulez faire cela pour toutes vos suites, vous pouvez enregistrer un beforeEach ou afterEach function dans le topSuite:

jasmine.getEnv().topSuite().beforeEach({fn: function() {
   //log in as admin
}});

Si vous voulez l'appliquer sur certaines suites, vous pouvez travailler avec des sous-suites:

describe("as_admin", function() {
  beforeEach(function() {
    //log in as admin
  });

  describe('Services Page',function() {...});
  describe('Administrators Page',function() {...});

}
14
répondu Steven 2015-05-13 09:11:53

Jasmine vous permet de mettre beforeEach et afterEach en dehors d'un appel describe. De cette façon, vous pouvez avoir une configuration et un démontage globaux pour toutes vos spécifications. Votre appel logout() semble être un bon candidat pour le démontage global, et si toutes vos spécifications se connectent en tant qu'administrateur, vous pouvez également le déplacer vers la portée globale.

Pour les choses qui sont utilisées dans certaines spécifications, mais pas toutes, avoir une méthode comme votre login_as_admin() semble être le meilleur moyen de consolider cette logique au même endroit.

3
répondu Gregg 2014-01-25 20:27:11

Référence: (Blog Pivotal Labs: Davis W. Frank )

Il décrit la collecte de fonctionnalités partagées dans une fonction appelée avec des paramètres pour les différentes suites individuelles. L'appel de cette fonction dans chaque suite exécutera la configuration / configuration commune.

En ce qui concerne la division des tests entre les fichiers; le fichier avec la fonction partagée peut être inclus dans chaque page avec une balise <script> si les tests sont basés sur un navigateur, ou par un require(...) près du haut si les tests sont le nœud de base. Vous pouvez ensuite exécuter les tests indépendamment, mais en utilisant cette configuration partagée qui n'est définie qu'une seule fois.

0
répondu xst 2014-05-15 18:05:28