From 2dc4e8801cce0b9ea13326a7fa3c173df53ba63f Mon Sep 17 00:00:00 2001 From: George Kalpakas Date: Thu, 25 Apr 2019 12:29:43 +0300 Subject: [PATCH] ci(docs-infra): loosen conditions to reduce flakiness on CI (#29757) The exact messages depend on the timing of several events and may vary between runs. This occasionally causes flakes on CI. This commit reduces the risk of flakes by loosen the conditions to only check for what we actually care about. Fixes #29544 PR Close #29757 --- .../lifecycle-hooks/e2e/src/app.e2e-spec.ts | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts b/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts index b90a6cefb5..7942db105d 100644 --- a/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts +++ b/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts @@ -1,8 +1,10 @@ 'use strict'; // necessary for es6 output in node -import { browser, element, by } from 'protractor'; +import { browser, element, ElementFinder, by } from 'protractor'; describe('Lifecycle hooks', () => { + const sendKeys = (el: ElementFinder, input: string) => + input.split('').reduce((prev, c) => prev.then(() => el.sendKeys(c)), Promise.resolve()); beforeAll(() => { browser.get(''); @@ -69,17 +71,16 @@ describe('Lifecycle hooks', () => { expect(count).toEqual(3, 'should start with 3 messages'); logCount = count; - await heroNameInputEle.sendKeys('-foo-'); - expect(titleEle.getText()).toContain('Windstorm-foo- can sing'); - + await sendKeys(heroNameInputEle, '-foo-'); count = await changeLogEles.count(); - // one more for each keystroke - expect(count).toEqual(logCount + 5, 'should add 5 more messages'); + expect(titleEle.getText()).toContain('Windstorm-foo- can sing'); + expect(count).toBeGreaterThanOrEqual(logCount + 5, 'should add at least one more message for each keystroke'); logCount = count; - await powerInputEle.sendKeys('-bar-'); + await sendKeys(powerInputEle, '-bar-'); + count = await changeLogEles.count(); expect(titleEle.getText()).toContain('Windstorm-foo- can sing-bar-'); - expect(changeLogEles.count()).toEqual(logCount + 6, 'should add 6 more messages'); + expect(count).toBeGreaterThanOrEqual(logCount + 5, 'should add at least one more message for each keystroke'); }); it('should support AfterView hooks', async () => { @@ -115,19 +116,17 @@ describe('Lifecycle hooks', () => { let commentEle = parentEle.element(by.className('comment')); let logEles = parentEle.all(by.css('h4 ~ div')); let childViewInputEle = parentEle.element(by.css('app-child input')); - let logCount: number; + let logCount = await logEles.count(); expect(childViewInputEle.getAttribute('value')).toContain('Magneta'); expect(commentEle.isPresent()).toBe(false, 'comment should not be in DOM'); - logCount = await logEles.count(); - await childViewInputEle.sendKeys('-test-'); + await sendKeys(childViewInputEle, '-test-'); + let count = await logEles.count(); expect(childViewInputEle.getAttribute('value')).toContain('-test-'); expect(commentEle.isPresent()).toBe(true, 'should have comment because >10 chars'); expect(commentEle.getText()).toContain('long name'); - - let count = await logEles.count(); - expect(logCount + 5).toEqual(count, '5 additional log messages should have been added'); + expect(count).toBeGreaterThanOrEqual(logCount + 5, 'additional log messages should have been added'); logCount = count; await buttonEle.click();