build: disable failing ivy playground example e2e tests (#28490)

With ed1ba88ffd9d0fc266808413fa517e7a31943bc8 we switched the
examples to run with Bazel. This means that we can now also run the
e2e tests for these examples against Ivy. All playground e2e tests,
**except** the `web_worker` examples, successfully run with Ivy.

The failing webworker e2e tests have been temporarily disabled with
`fixmeIvy` and need to be investigated in a follow-up.

PR Close #28490
This commit is contained in:
Paul Gschwendtner 2019-02-01 14:55:11 +01:00 committed by Matias Niemelä
parent 16a78f97f5
commit 5cdbdc9ee0
6 changed files with 222 additions and 205 deletions

View File

@ -6,10 +6,12 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {verifyNoBrowserErrors} from 'e2e_util/e2e_util'; import {fixmeIvy} from '@angular/private/testing';
import {browser} from 'protractor'; import {browser} from 'protractor';
describe('hello world', function() { import {verifyNoBrowserErrors} from '../../../e2e_util/e2e_util';
fixmeIvy('NullInjectorError: No provider for Renderer!').describe('hello world', function() {
afterEach(verifyNoBrowserErrors); afterEach(verifyNoBrowserErrors);

View File

@ -6,70 +6,73 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {verifyNoBrowserErrors} from 'e2e_util/e2e_util'; import {fixmeIvy} from '@angular/private/testing';
import {ExpectedConditions, browser, by, element, protractor} from 'protractor'; import {ExpectedConditions, browser, by, element, protractor} from 'protractor';
import {verifyNoBrowserErrors} from '../../../../e2e_util/e2e_util';
describe('WebWorkers Input', function() { fixmeIvy('NullInjectorError: No provider for InjectionToken ROOT_CONTEXT_TOKEN!')
afterEach(() => { .describe('WebWorkers Input', function() {
verifyNoBrowserErrors(); afterEach(() => {
browser.ignoreSynchronization = false; verifyNoBrowserErrors();
}); browser.ignoreSynchronization = false;
const selector = 'input-app'; });
const URL = 'all/playground/src/web_workers/input/index.html'; const selector = 'input-app';
const VALUE = 'test val'; const URL = '/';
const VALUE = 'test val';
it('should bootstrap', () => { it('should bootstrap', () => {
// This test can't wait for Angular as Testability is not available when using WebWorker // This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true; browser.ignoreSynchronization = true;
browser.get(URL); browser.get(URL);
waitForBootstrap(); waitForBootstrap();
const elem = element(by.css(selector + ' h2')); const elem = element(by.css(selector + ' h2'));
expect(elem.getText()).toEqual('Input App'); expect(elem.getText()).toEqual('Input App');
}); });
it('should bind to input value', () => { it('should bind to input value', () => {
// This test can't wait for Angular as Testability is not available when using WebWorker // This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true; browser.ignoreSynchronization = true;
browser.get(URL); browser.get(URL);
waitForBootstrap(); waitForBootstrap();
const input = element(by.css(selector + ' input')); const input = element(by.css(selector + ' input'));
input.sendKeys(VALUE); input.sendKeys(VALUE);
const displayElem = element(by.css(selector + ' .input-val')); const displayElem = element(by.css(selector + ' .input-val'));
const expectedVal = `Input val is ${VALUE}.`; const expectedVal = `Input val is ${VALUE}.`;
browser.wait(ExpectedConditions.textToBePresentInElement(displayElem, expectedVal), 5000); browser.wait(ExpectedConditions.textToBePresentInElement(displayElem, expectedVal), 5000);
expect(displayElem.getText()).toEqual(expectedVal); expect(displayElem.getText()).toEqual(expectedVal);
}); });
it('should bind to textarea value', () => { it('should bind to textarea value', () => {
// This test can't wait for Angular as Testability is not available when using WebWorker // This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true; browser.ignoreSynchronization = true;
browser.get(URL); browser.get(URL);
waitForBootstrap(); waitForBootstrap();
const input = element(by.css(selector + ' textarea')); const input = element(by.css(selector + ' textarea'));
input.sendKeys(VALUE); input.sendKeys(VALUE);
const displayElem = element(by.css(selector + ' .textarea-val')); const displayElem = element(by.css(selector + ' .textarea-val'));
const expectedVal = `Textarea val is ${VALUE}.`; const expectedVal = `Textarea val is ${VALUE}.`;
browser.wait(ExpectedConditions.textToBePresentInElement(displayElem, expectedVal), 5000); browser.wait(ExpectedConditions.textToBePresentInElement(displayElem, expectedVal), 5000);
expect(displayElem.getText()).toEqual(expectedVal); expect(displayElem.getText()).toEqual(expectedVal);
}); });
function waitForBootstrap() { function waitForBootstrap() {
browser.wait(protractor.until.elementLocated(by.css(selector + ' h2')), 5000) browser.wait(protractor.until.elementLocated(by.css(selector + ' h2')), 5000)
.then( .then(
() => { () => {
const elem = element(by.css(selector + ' h2')); const elem = element(by.css(selector + ' h2'));
browser.wait( browser.wait(
protractor.ExpectedConditions.textToBePresentInElement(elem, 'Input App'), 5000); protractor.ExpectedConditions.textToBePresentInElement(elem, 'Input App'),
}, 5000);
() => { },
// jasmine will timeout if this gets called too many times () => {
console.error('>> unexpected timeout -> browser.refresh()'); // jasmine will timeout if this gets called too many times
browser.refresh(); console.error('>> unexpected timeout -> browser.refresh()');
waitForBootstrap(); browser.refresh();
}); waitForBootstrap();
} });
}); }
});

View File

@ -6,53 +6,56 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {verifyNoBrowserErrors} from 'e2e_util/e2e_util'; import {fixmeIvy} from '@angular/private/testing';
import {ExpectedConditions, browser, by, element, protractor} from 'protractor'; import {ExpectedConditions, browser, by, element, protractor} from 'protractor';
describe('WebWorkers Kitchen Sink', function() { import {verifyNoBrowserErrors} from '../../../../e2e_util/e2e_util';
afterEach(() => {
verifyNoBrowserErrors();
browser.ignoreSynchronization = false;
});
const selector = 'hello-app .greeting';
const URL = 'all/playground/src/web_workers/kitchen_sink/index.html';
it('should greet', () => { fixmeIvy('NullInjectorError: No provider for InjectionToken ROOT_CONTEXT_TOKEN!')
// This test can't wait for Angular as Testability is not available when using WebWorker .describe('WebWorkers Kitchen Sink', function() {
browser.ignoreSynchronization = true; afterEach(() => {
browser.get(URL); verifyNoBrowserErrors();
browser.ignoreSynchronization = false;
});
const selector = 'hello-app .greeting';
const URL = '/';
browser.wait(protractor.until.elementLocated(by.css(selector)), 15000); it('should greet', () => {
const elem = element(by.css(selector)); // This test can't wait for Angular as Testability is not available when using WebWorker
browser.wait(ExpectedConditions.textToBePresentInElement(elem, 'hello world!'), 5000); browser.ignoreSynchronization = true;
expect(elem.getText()).toEqual('hello world!'); browser.get(URL);
}); browser.wait(protractor.until.elementLocated(by.css(selector)), 15000);
const elem = element(by.css(selector));
browser.wait(ExpectedConditions.textToBePresentInElement(elem, 'hello world!'), 5000);
expect(elem.getText()).toEqual('hello world!');
it('should change greeting', () => { });
// This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true;
browser.get(URL);
const changeButtonSelector = 'hello-app .changeButton';
browser.wait(protractor.until.elementLocated(by.css(changeButtonSelector)), 15000); it('should change greeting', () => {
element(by.css(changeButtonSelector)).click(); // This test can't wait for Angular as Testability is not available when using WebWorker
const elem = element(by.css(selector)); browser.ignoreSynchronization = true;
browser.wait(ExpectedConditions.textToBePresentInElement(elem, 'howdy world!'), 5000); browser.get(URL);
expect(elem.getText()).toEqual('howdy world!'); const changeButtonSelector = 'hello-app .changeButton';
});
it('should display correct key names', () => { browser.wait(protractor.until.elementLocated(by.css(changeButtonSelector)), 15000);
// This test can't wait for Angular as Testability is not available when using WebWorker element(by.css(changeButtonSelector)).click();
browser.ignoreSynchronization = true; const elem = element(by.css(selector));
browser.get(URL); browser.wait(ExpectedConditions.textToBePresentInElement(elem, 'howdy world!'), 5000);
browser.wait(protractor.until.elementLocated(by.css('.sample-area')), 15000); expect(elem.getText()).toEqual('howdy world!');
});
const area = element.all(by.css('.sample-area')).first(); it('should display correct key names', () => {
expect(area.getText()).toEqual('(none)'); // This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true;
browser.get(URL);
browser.wait(protractor.until.elementLocated(by.css('.sample-area')), 15000);
area.sendKeys('u'); const area = element.all(by.css('.sample-area')).first();
browser.wait(ExpectedConditions.textToBePresentInElement(area, 'U'), 5000); expect(area.getText()).toEqual('(none)');
expect(area.getText()).toEqual('U');
}); area.sendKeys('u');
}); browser.wait(ExpectedConditions.textToBePresentInElement(area, 'U'), 5000);
expect(area.getText()).toEqual('U');
});
});

View File

@ -6,41 +6,44 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {verifyNoBrowserErrors} from 'e2e_util/e2e_util'; import {fixmeIvy} from '@angular/private/testing';
import {ExpectedConditions, browser, by, element, protractor} from 'protractor'; import {ExpectedConditions, browser, by, element, protractor} from 'protractor';
const URL = 'all/playground/src/web_workers/message_broker/index.html'; import {verifyNoBrowserErrors} from '../../../../e2e_util/e2e_util';
describe('MessageBroker', function() { const URL = '/';
afterEach(() => { fixmeIvy('NullInjectorError: No provider for InjectionToken ROOT_CONTEXT_TOKEN!')
verifyNoBrowserErrors(); .describe('MessageBroker', function() {
browser.ignoreSynchronization = false;
});
it('should bootstrap', () => { afterEach(() => {
// This test can't wait for Angular as Testability is not available when using WebWorker verifyNoBrowserErrors();
browser.ignoreSynchronization = true; browser.ignoreSynchronization = false;
browser.get(URL); });
waitForBootstrap();
expect(element(by.css('app h1')).getText()).toEqual('WebWorker MessageBroker Test');
});
it('should echo messages', () => { it('should bootstrap', () => {
const VALUE = 'Hi There'; // This test can't wait for Angular as Testability is not available when using WebWorker
// This test can't wait for Angular as Testability is not available when using WebWorker browser.ignoreSynchronization = true;
browser.ignoreSynchronization = true; browser.get(URL);
browser.get(URL); waitForBootstrap();
waitForBootstrap(); expect(element(by.css('app h1')).getText()).toEqual('WebWorker MessageBroker Test');
});
const input = element.all(by.css('#echo_input')).first(); it('should echo messages', () => {
input.sendKeys(VALUE); const VALUE = 'Hi There';
element(by.css('#send_echo')).click(); // This test can't wait for Angular as Testability is not available when using WebWorker
const area = element(by.css('#echo_result')); browser.ignoreSynchronization = true;
browser.wait(ExpectedConditions.textToBePresentInElement(area, VALUE), 5000); browser.get(URL);
expect(area.getText()).toEqual(VALUE); waitForBootstrap();
});
}); const input = element.all(by.css('#echo_input')).first();
input.sendKeys(VALUE);
element(by.css('#send_echo')).click();
const area = element(by.css('#echo_result'));
browser.wait(ExpectedConditions.textToBePresentInElement(area, VALUE), 5000);
expect(area.getText()).toEqual(VALUE);
});
});
function waitForBootstrap(): void { function waitForBootstrap(): void {
browser.wait(protractor.until.elementLocated(by.css('app h1')), 15000); browser.wait(protractor.until.elementLocated(by.css('app h1')), 15000);

View File

@ -6,79 +6,82 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {verifyNoBrowserErrors} from 'e2e_util/e2e_util'; import {fixmeIvy} from '@angular/private/testing';
import {browser, by, element, protractor} from 'protractor'; import {browser, by, element, protractor} from 'protractor';
describe('WebWorker Router', () => { import {verifyNoBrowserErrors} from '../../../../e2e_util/e2e_util';
beforeEach(() => {
// This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true;
browser.get('/');
});
afterEach(() => { fixmeIvy('NullInjectorError: No provider for InjectionToken ROOT_CONTEXT_TOKEN!')
verifyNoBrowserErrors(); .describe('WebWorker Router', () => {
browser.ignoreSynchronization = false; beforeEach(() => {
}); // This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true;
browser.get('/');
});
const contentSelector = 'app main h1'; afterEach(() => {
const navSelector = 'app nav ul'; verifyNoBrowserErrors();
const baseUrl = 'all/playground/src/web_workers/router/index.html'; browser.ignoreSynchronization = false;
});
it('should route on click', () => { const contentSelector = 'app main h1';
browser.get(baseUrl); const navSelector = 'app nav ul';
const baseUrl = '/';
waitForElement(contentSelector); it('should route on click', () => {
let content = element(by.css(contentSelector)); browser.get(baseUrl);
expect(content.getText()).toEqual('Start');
const aboutBtn = element(by.css(navSelector + ' .about')); waitForElement(contentSelector);
aboutBtn.click(); let content = element(by.css(contentSelector));
waitForUrl(/\/about/); expect(content.getText()).toEqual('Start');
waitForElement(contentSelector);
waitForElementText(contentSelector, 'About');
content = element(by.css(contentSelector));
expect(content.getText()).toEqual('About');
expect(browser.getCurrentUrl()).toMatch(/\/about/);
const contactBtn = element(by.css(navSelector + ' .contact')); const aboutBtn = element(by.css(navSelector + ' .about'));
contactBtn.click(); aboutBtn.click();
waitForUrl(/\/contact/); waitForUrl(/\/about/);
waitForElement(contentSelector); waitForElement(contentSelector);
waitForElementText(contentSelector, 'Contact'); waitForElementText(contentSelector, 'About');
content = element(by.css(contentSelector)); content = element(by.css(contentSelector));
expect(content.getText()).toEqual('Contact'); expect(content.getText()).toEqual('About');
expect(browser.getCurrentUrl()).toMatch(/\/contact/); expect(browser.getCurrentUrl()).toMatch(/\/about/);
});
it('should load the correct route from the URL', () => { const contactBtn = element(by.css(navSelector + ' .contact'));
browser.get(baseUrl + '#/about'); contactBtn.click();
waitForUrl(/\/contact/);
waitForElement(contentSelector);
waitForElementText(contentSelector, 'Contact');
content = element(by.css(contentSelector));
expect(content.getText()).toEqual('Contact');
expect(browser.getCurrentUrl()).toMatch(/\/contact/);
});
waitForElement(contentSelector); it('should load the correct route from the URL', () => {
waitForElementText(contentSelector, 'About'); browser.get(baseUrl + '#/about');
const content = element(by.css(contentSelector));
expect(content.getText()).toEqual('About');
});
function waitForElement(selector: string): void { waitForElement(contentSelector);
browser.wait(protractor.until.elementLocated(by.css(selector)), 15000); waitForElementText(contentSelector, 'About');
} const content = element(by.css(contentSelector));
expect(content.getText()).toEqual('About');
});
function waitForElementText(contentSelector: string, expected: string): void { function waitForElement(selector: string): void {
browser.wait(() => { browser.wait(protractor.until.elementLocated(by.css(selector)), 15000);
const deferred = protractor.promise.defer(); }
const elem = element(by.css(contentSelector));
elem.getText().then((text: string) => { return deferred.fulfill(text === expected); });
return deferred.promise;
}, 5000);
}
function waitForUrl(regex: RegExp): void { function waitForElementText(contentSelector: string, expected: string): void {
browser.wait(() => { browser.wait(() => {
const deferred = protractor.promise.defer(); const deferred = protractor.promise.defer();
browser.getCurrentUrl().then( const elem = element(by.css(contentSelector));
(url: string) => { return deferred.fulfill(url.match(regex) !== null); }); elem.getText().then((text: string) => { return deferred.fulfill(text === expected); });
return deferred.promise; return deferred.promise;
}, 5000); }, 5000);
} }
});
function waitForUrl(regex: RegExp): void {
browser.wait(() => {
const deferred = protractor.promise.defer();
browser.getCurrentUrl().then(
(url: string) => { return deferred.fulfill(url.match(regex) !== null); });
return deferred.promise;
}, 5000);
}
});

View File

@ -6,27 +6,30 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {verifyNoBrowserErrors} from 'e2e_util/e2e_util'; import {fixmeIvy} from '@angular/private/testing';
import {browser, by, element, protractor} from 'protractor'; import {browser, by, element, protractor} from 'protractor';
describe('WebWorkers Todo', function() { import {verifyNoBrowserErrors} from '../../../../e2e_util/e2e_util';
afterEach(() => {
verifyNoBrowserErrors();
browser.ignoreSynchronization = false;
});
const URL = 'all/playground/src/web_workers/todo/index.html'; fixmeIvy('NullInjectorError: No provider for InjectionToken ROOT_CONTEXT_TOKEN!')
.describe('WebWorkers Todo', function() {
afterEach(() => {
verifyNoBrowserErrors();
browser.ignoreSynchronization = false;
});
it('should bootstrap', () => { const URL = '/';
// This test can't wait for Angular as Testability is not available when using WebWorker
browser.ignoreSynchronization = true;
browser.get(URL);
waitForBootstrap(); it('should bootstrap', () => {
expect(element(by.css('#todoapp header')).getText()).toEqual('todos'); // This test can't wait for Angular as Testability is not available when using WebWorker
}); browser.ignoreSynchronization = true;
browser.get(URL);
}); waitForBootstrap();
expect(element(by.css('#todoapp header')).getText()).toEqual('todos');
});
});
function waitForBootstrap(): void { function waitForBootstrap(): void {
browser.wait(protractor.until.elementLocated(by.css('todo-app #todoapp')), 15000); browser.wait(protractor.until.elementLocated(by.css('todo-app #todoapp')), 15000);