2017-10-13 1 views
2

Ich habe gerade angefangen, Bryntum Siesta und ExtJs für automatisierte Tests zu verwenden. Meine erste, sehr einfache Testarbeit, wie ich es erwartet habe. Jetzt stieß ich auf ein Problem mit DRY-Code.Globale Funktion in Siesta

Ich versuche, DRY-Code für einen Login-Test zu schreiben.

Es gibt zwei Fälle hier: - eine Anmeldung mit gültigen Daten - ein Login mit nicht gültigen Daten (falschem Passwort und/oder Benutzername)

in Java mit globalen Variablen/Funktionen funktionieren würde. Und ich dachte, dass ich so etwas wie globale Variablen von Javascript gemacht habe. Aber es funktioniert nicht.

So habe ich meine Tryout-Funktion:

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

und mein Ziel ist es in meinem t.chain in meinem Testfile() zu nennen:

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

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

Wenn ich eine Funktion aufrufen, die war erstellt in diesem Testfile über der Kette, funktioniert es. Es tut mir leid, wenn es einige grundlegende Javascript Frage, aber ich bin am Boden zerstört: D

Vielen Dank im Voraus!

+1

Können Sie ganze Testdateien posten? Und welchen Fehler bekommst du? – pagep

Antwort

3

Sie können Ihre Testklasse erweitern, um Hilfsmethoden hinzuzufügen und DRY-Verletzungen zu vermeiden. Dieser Leitpfosten fasst es zusammen: https://www.bryntum.com/docs/siesta/#!/guide/extending_test_class

Lassen Sie uns 2 spezielle Behauptungen erstellen, die die ungerade Parität einer bestandenen Zahl überprüfen werden. Normalerweise muss eine Assertion ihre Aussage überprüfen und das Ergebnis entweder mit {@link Siesta.Test # pass} oder {@link Siesta.Test # fail} -Methoden melden.

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' 
       }); 
      } 
     } 
    } 
}) 

Wenn Fehler, versuchen Sie, so viele Informationen über den Fehler wie möglich zur Verfügung zu stellen und die Fehlermeldung in einer lesbaren Form zu formatieren. Weitere Informationen finden Sie in der Dokumentation zu {@link Siesta.Test # fail} .

Um die Analen Ihre neue Testklasse machen Sie haben die Testklasse angeben, indem Sie die Option {@link Siesta.Harness # Testclass} Konfiguration zu verwenden:

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

    testClass : MyProject.MyTestClass, 

    preload  : [ 
     ... 
    ] 
}) 

Die Testklasse geladen werden soll direkt nach der Siesta-all.js Datei:

<!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> 

Jetzt können Sie Ihre individuelle Behauptung oder Utility-Methoden in allen Tests verwenden:

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

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

Ich werde dies bei der Arbeit am Mittwoch versuchen, danke! :) – adamswebspace

+0

Hey @mats ich lief in ein neues Problem. – adamswebspace

+0

Ich habe die Art und Weise benutzt, wie du gezeigt hast und eine Testklasse gemacht. Mit meiner ersten Testfunktion (das war eine Testfunktion, die einen Wert nimmt und es mit einer console.log ausgibt. Wenn ich eine andere Methode zur Klasse hinzufüge und sie genauso verwende wie mit der isEven() - Funktion, d Erhalte einen Fehler Die Fehlermeldung besagt, dass: isOdd keine Funktion ist, was passiert, wenn ich die Funktion aus der Dokumentation benutze. – adamswebspace