2016-08-17 4 views
0

Ich versuche auf eine Versprechen Auflösung mit Gurke, Chai und Winkelmesser zu warten. Gibt es eine Möglichkeit, Chai zu verwenden, um auf etwas (wie ein Pageraden) zu warten, bevor der Rückruf gesendet wird?Wie warten Sie auf ein Versprechen mit Winkelmesser und Chai?

Ich möchte so etwas wie:

browser.get(url).then(callback) 

die ich dachte, in Chai wäre:

browser.get(url).should.be.fulfilled.and.notify(callback); 

obwohl, wenn ich das tue, ich sehe gerade eine Auszeit bekommen, aber ich die Seite hat geladen. Ich habe es bereits Setup mit:

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

Ich will nicht für etwas überprüfen, ich will nur die Seite geladen wird sicherstellen. Von dem, was ich habe die meisten Menschen gesehen gerade tun:

browser.get(url); 
callback(); 

und nur ein assert oder expect in einer Gherkins Dann-Klausel verwenden, aber ich mag warten, bis die Seite in einem bestimmten oder wenn zu laden.

Antwort

1

Was ich mit Ihrer Frage zu verstehen ist, dass Sie die asynchrone Given, When, Then's in CucumberJS wollen als synchrone Ausführung verhalten, so dass, sobald Ihr Schritt mit browser.get(url) abgeschlossen ist dann der nächste Schritt Definition ausgeführt wird. Wenn das ist, was Ihre Frage ist dann Ja können wir dass-

Sie müssen tun, um entweder return ein Versprechen oder verwenden Sie das done Rückruf in Ihren Schritt Definitionen. Ansonsten weiß Gurke nicht, wann Ihre asynchronen Aktionen abgeschlossen sind.

Ich bevorzuge es return Versprechen, wenn ich auf die Ergebnisse mit .then Funktion einige Aktionen am Durchführung und .done Callback-Funktion verwenden, wenn ich nicht bin, auch nicht callbacks Sie brauchen jetzt CucumberJS unterstützt promises. So sollte Ihre Schrittdatei aussehen -

+0

Wenn ich versuche, die Rückkehrfunktion wie 'return browser.get ('http://google.com') zu verwenden;' es schlägt immer noch mit einem Timeout-Fehler fehl. Ich habe es auch mit einem '.then' danach mit einem' callback' probiert, das auch ausläuft. – user3554664

+0

ok ich denke, Ihre Seite dauert mehr als die Standardzeit von 5000 ms der Schritte, deshalb erhalten Sie Timeout error.did Sie versuchen, die Standardzeit zu erhöhen? –

+0

Ich habe bis zu einer Minute versucht. Ich sehe die Seite laden, obwohl nichts passiert. – user3554664

Verwandte Themen