2016-07-21 3 views
1

Ich habe meinen ersten Abnahmetest für Winkel 2 mit Winkelmesser + Gurke geschrieben und es scheint, wenn ich table.filter aufrufen, hängt der Browser und Timeout bis zur Timeout-Zeit.Winkelmesser Tabelle.Filter Timeout

Ich bin mit chai-as-versprochen Erwartungen:

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 

Unten ist der Code, der nicht funktioniert.

var grid = $$(".table tr"); 
grid.filter(function (row) { 
    var cells = row.$$('td'); 
    expect(cells.get(0).getText()).to.eventually.equal(factoryName).and.notify(done); 

Ich habe es geschafft durch den Austausch über Code mein Szenario Pass zu machen mit:

var grid = $$(".table tr"); 
for (var i = 1; i < grid.count() ; i++) { 
    var cells = grid.get(i).$$('td'); 
    expect(cells.get(0).getText()).to.eventually.equal(factoryName).and.notify(done); 
} 

ich kämpfen, um den Grund zu finden, warum table.filter ist Timeouts verursacht.

Kann mir jemand auch mit Artikel/Beitrag helfen, wie man diese steps.js in TypScript umwandelt, was eine richtige Art des Testens in angular2 ist?

Antwort

1

.filter()erwartet eine Filterfunktion etwas haben, daraus zurück (einen booleschen Wert, oder ein Versprechen einen boolescher Wert der Lösung, um zu entscheiden, ob ein Element in dem Array oder nicht zu überspringen).

Von dem, was ich verstehe, Sie meinten:

var grid = $$(".table tr"); 
var desiredRow = grid.filter(function (row) { 
    var cells = row.$$('td'); 
    return cells.first().getText().then(function(cellText) { 
     return cellText === factoryName; 
    }); 
}).first(); 
// do something with the desiredRow 

Oder, wenn Sie die erste Zelle jeder Zeile überprüfen soll, um gleich factoryName, sollten Sie/könnte each() verwendet haben:

var grid = $$(".table tr"); 
grid.each(function (row) { 
    var cells = row.$$('td'); 
    expect(cells.first().getText()).to.eventually.equal(factoryName); 
}); 

Oder Sie die erste Zelle jeder Zeile gefunden haben könnte first-of-type CSS selector pseudo-class und anschließend alle Elemente des Arrays zu behaupten haben den factoryName Wert:

var cells = $$(".table tr td:first-of-type"); 

// example for 2 rows 
// for N rows, http://stackoverflow.com/questions/14832603/check-if-all-values-of-array-are-equal 
expect(cells.getText()).toEqual([factoryName, factoryName]); 
+0

Ich habe versucht, jede Funktion, aber es gibt Fehler, dass jeder ist keine Funktion, dann fand ich, dass Filter zu jeder Alternative ist. Meine Anforderung besteht darin, zu überprüfen, ob die erste Zelle den Fabriknamen enthält. –

+0

ist es möglich, den ersten Zellenwert mit Filter zu erhalten, wenn es mit dem Fabriknamen übereinstimmt oder expect() in der Filterfunktion –

+0

@KamranPervaiz über 'each()' ... das ist komisch ... welche Version von Winkelmesser verwenden Sie? – alecxe