2017-11-29 1 views
1

Ich benutze Bryntum Siesta für den UI-Test einer ExtJS-App. Ich habe ein TestClass erstellt und ziele darauf ab, seine Methoden für verschiedene Ansichten zu verwenden. Die gesamten Testaktionen sind dieselben, nur einige spezifische Dinge ändern sich, wie package, view, grid Namen. Hier einige Auszüge aus Test Suite:Wie überschreibt man testClass-Methoden mit Siesta?

Haupttest-Klasse

var isDisplaying = 'Grid is displaying now.'; 
var collapseDesc = 'Collapse Navbar'; 

Class('Siesta.Test.ListScreen', { 

    isa  : Siesta.Test.ExtJS, 

    methods: { 
     navigation: function (callback) { 
      var t = this; 

      t.chain(
       {waitForCQ: 'treelist[itemId=navigationTreeList]'}, 

       function (next) { 
        t.click('treelist[itemId=navigationTreeList]'); 
        next(); 

       }, 
       {click: '>> treelistitem[_text=Package_Name]'}, 
       {click: '>> treelistitem[_text=Package_Submodule]', desc: 'Package Submodule'+isDisplaying}, 
       {click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc}, 

       function (next) { 
        console.log('navigation func log'); 
        next(); 
       }, 

       callback 
      ) 
     } 
    } 
}); 

Und das Testclass von Package_Submodule fordern und bekommen Erfolg:

describe('UI Testing: Submodule List Screen', function (t) { 

    //Extended method for navigation to submodule 
    t.it('Should open: Submodule Grid', function (t) { 
     t.chain(
      { 
       navigation: t.next 
      } 
     ) 
    }); 
}); 

Die Sache hier ist möchte ich Rufen Sie dieselbe TestClass Methode für ein anderes Submodul auf und überschreiben Sie mehrere Dinge wie Package_Name und Package_Submodule. Wie kann ich Erfolg damit haben?

Vielen Dank im Voraus


UPDATE durch JackSamura Antwort:

Lieber @SamuraiJack Ich habe die Hauptklasse (LIST-Seite) Refactoring und eingefügt has Attribut. Ebenso modifiziert die harness mit config Eigenschaft, aber leider hat es myPackageName oder mySubModule nicht überschrieben. Anstelle von ich habe diesen Fehler:

Waiting for element ">> treelistitem[_text=packageName]" to appear 

Ebenso habe ich versucht, Funktionsargumente zu verwenden, aber es hat auch nicht funktioniert. Könnten Sie mir bitte eine Idee geben, warum ich neue Werte nicht außer Kraft setzen konnte?

Hauptklasse (Aktualisiert):

var isDisplaying = 'Grid is displaying now.'; 
    var collapseDesc = 'Collapse Navbar'; 

    Class('Siesta.Test.ListScreen', { 

     isa  : Siesta.Test.ExtJS, 

     has : { 
      myPackageName : 'packageName', 
      mySubModule : 'subModule' 
     }, 

     methods: { 
      navigation: function (callback) { 
       var t = this; 

       t.chain(
        {waitForCQ: 'treelist[itemId=navigationTreeList]'}, 

        function (next) { 
         t.click('treelist[itemId=navigationTreeList]'); 
         next(); 

        }, 
        {click: '>> treelistitem[_text='+this.myPackageName+']'}, 
        {click: '>> treelistitem[_text='+this.mySubModule+']', desc: this.mySubModule+isDisplaying}, 
        {click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc}, 

        function (next) { 
         console.log('navigation func log'); 
         next(); 
        }, 

        callback 
       ) 
      } 
     } 
    }); 

Index.js:

group: 'UI Tests', 
    items: [ 
     { 
      group: 'Submodule List Screen', 
      testClass: Siesta.Test.ListScreen, 
      items: [ 
       { 
        title   : 'Submodule1', 
        hostPageUrl  : localApp, 
        url    : '02-ui-tests/02_01-submodule-list-screen/submodule1-list.t.js', 
        config  : { 
         myPackageName  : 'Package1', 
         mySubModule  : 'Submodule1' 
        } 
       }, 

Antwort

2

Sie können es in 2 Möglichkeiten:

1) Fügen Sie Argumente für die "Navigation" Methode:

// callback should be the last one 
navigation: function (packageName, packageSubModule, callback) { 

Wahrscheinlich selbsterklärend

2) Ein bisschen komplexer - fügen Sie Ihrer benutzerdefinierten Testklasse neue Attribute hinzu:

Class('Siesta.Test.ListScreen', { 

    isa  : Siesta.Test.ExtJS, 

    has : { 
     // values goes into prototype, like in Ext 
     myPackageName : 'packageName', 
     mySubModule : 'subModule' 
    }, 

    methods: { 

Dann können Sie diese Attribute in „Navigation“ -Methode wie üblich siehe: this.myPackageName

Dann außer Kraft zu setzen, können Sie entweder eine neue Testklasse erstellen (Subklassen Siesta.Test.ListScreen) und neu definieren die Attribute darin, oder verwenden alternativ die Config-Eigenschaft des Test Descriptor:

harness.start(
    { 
     url   : 'mytest.t.js', 
     config  : { 
      myPackageName  : 'value1', 
      mySubModule  : 'value2' 
     } 
    }, 
    ... 
) 

Tipp: um schneller die Antwort zu erhalten - per Post an die Siesta Forum: https://www.bryntum.com/forum/viewforum.php?f=20

UPDATE:

Die Fehler, die Sie bekommen haben, sind wahrscheinlich, weil die "Navigations" -Methode vom Untertest gestartet wird (jeder "t.it()" oder "t.describe()" Abschnitt erzeugt einen separaten "Untertest"). Bei diesen Untertests wird die Konfiguration nicht angewendet - sie wird nur auf den Test der obersten Ebene angewendet. Eine Lösung wäre, die Attributwerte zu kopieren:

// in the "methods" of the custom test class 
    processSubTestConfig : function (config) { 
     var cfg = this.SUPER(config) 

     cfg.myPackage = this.myPackage 
     ... 

     return cfg 
    }, 

Aber das ist schon fortgeschritten Siesta Internal Coding. Wahrscheinlich wird nur die Verwendung von Funktionsargumenten einfacher.

+0

Sehr geehrte @SamuraiJack danke für Ratschläge. Ich führe beide Aspekte ein und verstehe den Prozess. Übrigens habe ich leider keine Zuschüsse, um auf Bryntums Foren zuzugreifen, weil es bezahlt ist. Und jetzt benutze ich die kostenlose Lite-Version von Siesta für meine persönliche Entwicklung. –

+0

Ich habe die Frage-basierte Implementierung Ihrer Ratschläge aktualisiert, aber mehrere Fehler bekommen. Könnten Sie bitte den aktualisierten Teil überprüfen. Danke vielmals. –

+1

Bryntum Forum ist kostenlos, einfach versuchen, sich anzumelden. Siesta Lite-Benutzer sind ebenfalls willkommen. – SamuraiJack