2017-10-13 13 views
2

Je viens de commencer à utiliser Bryntum Siesta et ExtJs pour les tests automatisés. Mon premier test très simple, comme je m'y attendais. Maintenant, je suis tombé sur un problème avec DRY-Code. J'essaie d'écrire le code DRY pour un test de connexion.Fonction globale dans Siesta

Il y a en fait deux cas ici: - un login avec des données valides - une connexion avec des données non valides (mot de passe incorrect ET/OU Nom d'utilisateur)

En Java, il travaillerait avec les variables/fonctions globales. Et j'ai pensé, que j'ai déjà fait quelque chose comme javascript global variables. Mais ça ne marche pas.

j'ai donc ma fonction essai:

var testFunction = function(){ 
    console.log("I am a global function, and i am working!"); 
}; 

et mon but est de l'appeler dans mon t.chain() dans mon Testfile:

{ 
      type: LoginUsername, 
      target: ">>#loginviewIdemId #loginForm #pwTriggerForm #fldName", 
      desc: 'Type in Username', 
     }, 

     function(next) { 
      testFunction(); 
      next(); 
     }, 

Quand j'appelle une fonction qui était créé dans ce testfile au-dessus de la chaîne, cela fonctionne. Je suis désolé si c'est une question de base javascript, mais je suis dévasté: D

Merci d'avance!

+1

Pouvez-vous poster un fichier de test complet? Et quelle erreur obtenez-vous? – pagep

Répondre

3

Vous pouvez étendre votre classe de test pour ajouter des méthodes utilitaires et éviter les violations DRY. Ce message guide le résume: https://www.bryntum.com/docs/siesta/#!/guide/extending_test_class

Créons 2 assertions spéciales, qui vérifient la parité impaire d'un nombre passé. Généralement, une assertion doit vérifier son instruction et rapporter le résultat avec les méthodes {@link Siesta.Test # pass} ou {@link Siesta.Test # fail}.

Class('MyProject.MyTestClass', { 
    isa  : Siesta.Test.ExtJS, 

    methods : { 

     isOdd : function (number, description) { 
      if (number % 2) { 
       this.pass(description); 
      } else { 
       this.fail(description, { 
        assertionName : 'isOdd', 
        got    : number, 
        annotation  : 'Need odd number' 
       }); 
      } 
     }, 

     isEven : function (number, description) { 
      if (!(number % 2)) { 
       this.pass(description); 
      } else { 
       this.fail(description, { 
        assertionName : 'isEven', 
        got    : number, 
        annotation  : 'Need even number' 
       }); 
      } 
     } 
    } 
}) 

en cas d'échec, essayez de fournir autant d'informations sur l'échec possible et formater le message d'erreur sous une forme lisible. Reportez-vous à la documentation de la méthode {@link Siesta.Test # fail} pour obtenir des options supplémentaires.

Pour faire le harnais utiliser votre nouvelle classe de test, vous devez spécifier la classe de test à utiliser en définissant l'option de configuration {@link Siesta.Harness # TestClass}:

harness.configure({ 
    title  : 'Awesome Test Suite', 

    testClass : MyProject.MyTestClass, 

    preload  : [ 
     ... 
    ] 
}) 

La classe de test doit être chargé juste après le fichier-siesta all.js:

<!DOCTYPE html> 
<html> 
    <head> 
     <link rel="stylesheet" type="text/css" href="__path_to_siesta__/resources/css/siesta-all.css"> 
     <script type="text/javascript" src="__path_to_siesta__/siesta-all.js"></script> 

     <!-- The file with new test class --> 
     <script type="text/javascript" src="lib/MyTestClass.js"></script> 

     <script type="text/javascript" src="index.js"></script> 
    </head> 

    <body> 
    </body> 
</html> 

vous pouvez maintenant utiliser votre affirmation personnalisée ou des méthodes d'utilité dans tous vos tests:

describe('My test', function(t) { 
    var nbr = 1; 

    t.isEven(nbr); // Will fail 
}) 
+0

Je vais essayer ça au travail le mercredi, merci! :) – adamswebspace

+0

Hey @mats j'ai rencontré un nouveau problème. – adamswebspace

+0

J'ai utilisé la façon dont vous avez montré et fait une classe de test. Avec ma première fonction de test (qui était une fonction de test qui prend une valeur et l'imprime avec un fichier console.log Si j'ajoute une autre méthode à la classe et l'utilise comme avec la fonction isEven(), Le message d'erreur indique que: isOdd n'est pas une fonction, ce qui se produit quand j'utilise la fonction des docs, vous savez ce qui ne va pas? – adamswebspace