2016-11-14 1 views
2

Ich arbeite an einer Funktion, die den Text von Elementen nach der Verwendung einer Filterfunktion lesen wird. Ich habe den zurückgegebenen Text ausgedruckt und er erhält die Elemente, aber ich glaube nicht, dass ich js Versprechungen verstehe. ActiveFilters ist ein var, das ich bereits identifiziert habe.Promises und for-Schleifen - versuchen, mehrere Elemente Text zu validieren

Die console.log druckt wahr und falsch wie gewünscht, jedoch gibt es zwei Dinge, die ich bemerkt habe. Wenn es falsch ist, bricht es nicht so, wie ich es in der if-Anweisung gesagt habe. Außerdem bekomme ich einen typeError: true ist kein thenable error .. Ich glaube, die Logik klingt gut in meinem Kopf, aber nicht in JS. Jede Hilfe würde sehr geschätzt werden.

+0

2 Probleme hier, erstens können Sie nicht eine Standard-Schleife für eine asynchrone Methode verwenden, und zweitens werden Sie! Bool ausgeführt, bevor Sie versprechen, ist sogar getan. – Keith

+0

Mein Javascript ist extrem schwach ... Ich habe versucht, Variablen im Versprechen zu initialisieren und dann eine for-Schleife zu verwenden, aber die Variablen wurden nicht initialisiert – Tree55Topz

+0

@Nico, es kann mehrere Elemente zu validieren geben. Der Filter aktualisiert die Ergebnisse, die ich aus all denen herausholen muss, aber viele Anzeigen (sagen wir 9 oder mehr) haben alle meinen gewünschten Filter. – Tree55Topz

Antwort

3

Der Winkelmesser element.all() unterstützt die Methode getText(), die den in den Elementen angezeigten Text als Array zurückgibt. Dann können Sie das resultierende Array mithilfe der Methode expect einfach vergleichen.

this.verifyColorFilterFunctional = function(color) { 
    activeFilters.getText().then(function (textArray) { 
    expect(textArray).to.equal(Array(textArray.length-1).fill(color)); 
    }); 
} 
+0

Gibt das getText() auch ein Versprechen zurück? Dieser Code funktionierte nicht so gut :( – Tree55Topz

+0

yeah, getText() gibt Ihnen das Versprechen zurück, aber "expect" -Methode wartet auf das Versprechen zu lösen und verwendet dann das Ergebnis für die Assertion. Also welchen Fehler bekommen Sie, wenn Sie versuchte die obige Lösung? –

+1

Nicht sicher, dass '.toEqual' wird auf die Auflösung warten. Es wäre einfacher zu zuerst' activeFilters.getText(). dann (Funktion (Texte) {'und dann gegen das erwartete Array' expect (Texte) .toEqual (Array (texts.length - 1) .fill (color)); ' –

Verwandte Themen