2017-12-29 9 views
1

Ich verwende Protractor zusammen mit Jasmine, um e2e Testfälle für eine Angular2 App zu schreiben.Wann wird der "defaultTimeoutInterval" im Winkelmesser zurückgesetzt?

Ich habe zwei Fragen:

1. Über DefaultTimeoutInterval

ich ein Verständnis haben, dass ein Countdown beginnt, wenn ein Versprechen beginnt und wenn das Versprechen bekommen nicht innerhalb der angegebenen defaultTimeoutInterval in protractor.conf.js abgeschlossen , Winkelmesser führt zu einem Fehler auf der Konsole. Aber wenn das Versprechen innerhalb der defaultTimeoutInterval abgeschlossen wird, wird der Countdown zurückgesetzt und würde gestartet werden, wenn das nächste Versprechen beginnt.

Wenn das Obige wahr ist, wollte ich klarstellen, Wenn ich eine Kette von Versprechen habe, wann wird der Countdown zurückgesetzt? Nachdem alle Versprechen in der Kette erfüllt sind oder nachdem jedes Versprechen abgeschlossen ist?

Wenn der Countdown zurückgesetzt wird, nachdem alle Versprechen in der Kette abgeschlossen sind, dann wäre die richtige Übung, die Versprechen als direkte Kinder der it()/fit() blocks zu haben?

Ich habe einen Beispielcode unten, um mehr zu erklären, was ich zu fragen versuche.

it("when does protractor's default timeout interval gets reset?",() => { 

expect("a single promise here").toBe('something');  // I believe, after the promise inside the expect block finishes, the defaultTimeoutInterval should Reset. 

// what happens if I have a chain of promises, like below? 
// whether the defaultTimeoutInterval resets after every single promise inside the method `validateSuccessAlert()` and then the chained promises are finsihed? 
// or will it reset on completion of every single promise? 
PO.validateSuccessAlert('a method which has chained promises inside itself, returns a promise').then(() => { 
    browser.waitForAngularEnabled(false).then(() => { 
     PO.getEmailActivationLink('xxxxxx').then((activationCode) => { 
      PO.openNewTab(activationCode).then(() => { 
       PO.switchToTab(1).then(() => { 
        expect(PO.isVisible(element(by.css('.activateMailBox h3 small')))).toBeTruthy(); 
        expect(element(by.css('.activateMailBox h3 small')).getText()).toBe('Congratulations!!'); 
        expect(PO.isNotVisible(PO.getButtonByText('Proceed'))); 
        PO.switchToTab(0); 
        browser.waitForAngularEnabled(true);      // Re-enable the angular wait 
       }) 
      }) 
     }); 
    }); 
}) 

})

2. Über allScriptsTimeout

ich das verstehe wirklich nicht, das gilt für: eine Spezifikation in jeder Datei? Wenn Sie ein wenig darüber auch erklären können, wird es großartig sein.

Antwort

2

1) defaultTimeoutInterval ist ein Timeout von Jasmin für jeden it nicht Testlauf für immer oder sehr lang zu machen - http://www.protractortest.org/#/timeouts#timeouts-from-jasmine

Sets es bis zu einem gewissen Standardwert, den Sie glauben, dass Ihre it nicht überschreiten sollte. Außer Kraft setzen, wenn der Test läuft viel weniger oder mehr als die Standard-Timeout mit dieser Syntax:

describe('Some feature', function() { 

    it('can be really slow', function() { 

    }, 5 * 60 * 1000) // 5 minutes 

    it('can be really fast', function() { 

    }, 5000) //5 seconds 
}) 

2) allScriptsTimeout Timeout für JEDEN Asynchron-Befehl in Winkelmesser ist, nicht zu lange auszuführen.

http://www.protractortest.org/#/timeouts#timeouts-from-webdriver

ich in der Regel setzen Sie sie nicht mehr als 10 Sekunden, um nicht jeden Befehl zu machen (wie .sendKeys(), .click() usw.) zu viel Zeit in Anspruch zu nehmen. Manchmal ist es notwendig, zu erhöhen, wenn Sie im Grid laufen, oder einige lange Befehle wie riesige .executeScript() oder so weiter zu machen.

+0

Danke, ich dachte mir aus der Reihe! –

Verwandte Themen