2016-06-11 6 views
2

Ich versuche einen E2e-Test für meine Winkelanwendung zu schreiben, und insbesondere eine Form, die 3 Auswahleingänge hat. Der Test muss die Auswahl zufälliger Optionen aus diesen Auswahlmöglichkeiten beinhalten. Die erste Auswahl ist bereits mit Daten gefüllt, aber die anderen 2 wählen asynchron aus, wenn die zuvor ausgewählte ausgewählt wurde, so dass sie voneinander abhängig sind.Winkelmesser - Test einer Winkelform mit dynamisch bestückten Eingängen

Die Auswahleingänge verwenden auch ng-disabled und aktivieren nur, wenn Optionen gemäß ihren ng-repeat-Ausdrücken verfügbar sind.

Ich bin mit dem Seitenobjekt Ansatz mit meinen Tests, und so bin versucht, einige Utility-Funktionen zu machen, das zufällige Auswahl Verhalten in meinen Tests, die ich brauche zu erreichen:

Seite Objekt:

this.selectRandomCustomer = function() { 
    var option, 
     randomIndex; 
    this.customerSelect.click(); 
    this.customerSelectOptions.count().then(function(count) { 
     randomIndex = Math.floor(Math.random() * count); 
     option = element(by.repeater('customer in vm.customers').row(randomIndex)); 
     option.click(); 
    }); 
    }; 

    this.selectRandomOrder = function() { 
    if(this.orderSelect.isEnabled()===true) { 
     var option, 
     randomIndex; 
     this.orderSelect.click(); 
     this.orderSelectOptions.count().then(function(count) { 
     randomIndex = Math.floor(Math.random() * count); 
     option = element(by.repeater('order in vm.orders').row(randomIndex)); 
     option.click(); 
     }); 
    } 
    }; 

Vorausgesetzt, dass die orderSelect kann nur einmal mit Optionen nach der Auswahl einer Option aus der customerSelect ausgewählt ausgewählt werden, fragte ich mich über das Versprechen in der Versprechen zurück, wenn aufgerufen, so this.selectRandomOrder aufrufen, aber es scheint Dies ist undefiniert, da ich einen Fehler vom Winkelmesser bekomme, der sagt, dass er die selectRandomOrder Funktion nicht finden kann.

Im Moment kann ich nur die erste Auswahl erhalten, um eine Option auszuwählen, da sie beim ersten Laden der Seite immer gefüllt ist.

Ich bin auch unsicher, ob die Verwendung von isEnabled() tatsächlich für mich funktioniert, da ich sicher bin, dass dies für meine zweite Eingabe zurückgeben soll, aber wenn ich diese abmelde, sehe ich falsch. Funktioniert das nicht mit ng-disabled?

Was sind die besten Verfahren für den Umgang mit Eingaben in einem Formular, das anfänglich nicht mit Daten gefüllt wird und darauf wartet, dass angular alle verfügbaren Optionen abruft und auffüllt?

Dank

UPDATE: Statt

Ich habe dies habe zu arbeiten um einen Anruf zu getAttribute() für das Vorhandensein der disabled Eigenschaft überprüfen verwenden.

Also aus meiner spec-Datei in einem it Block kann ich

page.customerSelect.getAttribute('disabled').then(function(result){ 
    if(!result) { 
     page.selectRandomCustomer(); 
    } 
}); 

page.orderSelect.getAttribute('disabled').then(function(result){ 
    if(!result) { 
     page.selectRandomOrder(); 
    } 
}); 

Ideal nennen, was ich möchte in der Lage sein wird zu tun, um die selectRandomOrder aufzurufen, nachdem die Option im selectRandomCustomer klicken:

Ich habe versucht, this.selectRandomOrder sofort nach der option.click() aufrufen, aber ich bekomme einen Fehler, keine solche Funktion zu sagen, es scheint this ist nicht zugänglich von innerhalb der zurückgegebenen Versprechen Funktion Rückruf .

Antwort

2

Es ist zumindest ein großes Problem in den entsandten Code:

if(this.orderSelect.isEnabled()===true) { 

Hier isEnabled()kehrt ein Versprechen.Sie müssen es auflösen, um seinen Wert zu prüfen:

var self = this; // saving the page object reference 
this.orderSelect.isEnabled().then(function (isEnabled) { 
    if (isEnabled) { 
     var option, 
      randomIndex; 
     self.orderSelect.click(); 
     self.orderSelectOptions.count().then(function(count) { 
      randomIndex = Math.floor(Math.random() * count); 
      option = element(by.repeater('order in vm.orders').row(randomIndex)); 
      option.click(); 
     }); 
    } 
}); 
+0

Ah ja ok, Sie sagen mindestens ein Hauptproblem. Also, was sollte ich sonst noch tun? Danke – mindparse

+0

@mindparse kommt drauf an..wie ist der aktuelle Stand des Problems? Hast du es geschafft? Vielen Dank. – alecxe

+0

Danke, ich habe es funktioniert aber mit getAttribute() anstelle der isEnabled(). Ich glaube, ich habe gelesen, dass isEnabled nicht gut mit ng-disable funktioniert. Jedenfalls sehe ich mein Update so, dass ich im Idealfall weitere Funktionen von jedem Aufruf des Rückrufs zu Kettenaufrufen zu Funktionen in meinem Seitenobjekt aufrufen möchte. Auf diese Weise kann ich nur eine Hilfefunktion namens "selectOptions" haben, die ich aus meiner Testspezifikationsdatei aufrufen kann. – mindparse

Verwandte Themen