2017-12-29 30 views
1

ProtractorJasmineを使用して、Angular2アプリのe2eテストケースを作成しています。分度器の「defaultTimeoutInterval」はいつリセットされますか?

私は2つの質問があります:私は約束がprotractor.conf.jsで指定defaultTimeoutInterval内に完了しませんならば約束が起動し、いつでもカウントダウンが開始されることを理解している

1. DefaultTimeoutIntervalについて

を分度器はコンソールにエラーを発生させます。しかし約束事がdefaultTimeoutInterval内で完了すると、カウントダウンはリセットされ、次の約束が始まると開始されます。

上記が真実なら、私は明確にしたいと思っています。もし私が約束を持っていたら、カウントダウンはいつリセットされますか?チェーンのすべての約束が完了した後、または各約束が完了した後で?

チェーン内のすべての約束が完了した後にカウントダウンがリセットされた場合、適切な練習はit()/fit() blocksの直接の子として約束を得ることでしょうか?

以下に、私が何を求めようとしているかを説明するためのサンプルコードを示します。 allScriptsTimeout

について

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.私は本当にこれがためにカウントし、これを理解していない:各ファイル内の1つのスペック? これについて少し説明できれば、それは素晴らしいことでしょう。

答えて

2

1)defaultTimeoutIntervalは永遠か、非常に長いテスト実行をしないために、各itためジャスミンからタイムアウトです - あなたはあなたのitを超えてはならないと考えているいくつかのデフォルト値にhttp://www.protractortest.org/#/timeouts#timeouts-from-jasmine

設定し、それを。あなたのテストは、この構文を使用して、デフォルトのタイムアウトよりもはるかに少ない以上実行された場合オーバーライド:

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は分度器の各非同期コマンドのタイムアウトで、あまりにも長い間、実行しないように。

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

私は通常、多くの時間を取るために、各コマンドにしないために、それを10秒以上に設定する(.sendKeys等()、.click()など)はありません。グリッドで実行するときや、.executeScript()などのような長いコマンドをいくつか作成するときには、それを増やす必要があることがあります。

+0

ありがとうございました、私はラインから方法を考えていた! –