test(ivy): enable more docs examples e2e tests (#28688)
PR Close #28688
This commit is contained in:
parent
73f9db53c2
commit
6a7fd70ddf
@ -15,11 +15,25 @@ const PROTRACTOR_CONFIG_FILENAME = path.join(__dirname, './shared/protractor.con
|
||||
const SJS_SPEC_FILENAME = 'e2e-spec.ts';
|
||||
const CLI_SPEC_FILENAME = 'e2e/src/app.e2e-spec.ts';
|
||||
const EXAMPLE_CONFIG_FILENAME = 'example-config.json';
|
||||
const IGNORED_EXAMPLES = [ // temporary ignores
|
||||
const IGNORED_EXAMPLES = [
|
||||
// temporary ignores
|
||||
'quickstart',
|
||||
'setup',
|
||||
];
|
||||
|
||||
const fixmeIvyExamples = [
|
||||
// fixmeIvy('unknown') version value goes undefined when clicking Major button after clicking
|
||||
// Minor button twice
|
||||
'component-interaction',
|
||||
// fixmeIvy('unknown') failed content projection and applied styles
|
||||
'component-styles',
|
||||
// fixmeIvy('unknown') ERROR Error: Unable to find context associated with [object
|
||||
// HTMLInputElement]
|
||||
'http',
|
||||
// fixmeIvy('unknown') app fails at runtime due to missing external service (goog is undefined)
|
||||
'i18n'
|
||||
];
|
||||
|
||||
/**
|
||||
* Run Protractor End-to-End Tests for Doc Samples
|
||||
*
|
||||
@ -58,7 +72,8 @@ function runE2e() {
|
||||
if (status.failed.length > 0) {
|
||||
return Promise.reject('Some test suites failed');
|
||||
}
|
||||
}).catch(function (e) {
|
||||
})
|
||||
.catch(function(e) {
|
||||
console.log(e);
|
||||
process.exitCode = 1;
|
||||
});
|
||||
@ -67,7 +82,6 @@ function runE2e() {
|
||||
// Finds all of the *e2e-spec.tests under the examples folder along with the corresponding apps
|
||||
// that they should run under. Then run each app/spec collection sequentially.
|
||||
function findAndRunE2eTests(filter, outputFile, shard) {
|
||||
|
||||
const shardParts = shard ? shard.split('/') : [0, 1];
|
||||
const shardModulo = parseInt(shardParts[0], 10);
|
||||
const shardDivider = parseInt(shardParts[1], 10);
|
||||
@ -93,7 +107,9 @@ function findAndRunE2eTests(filter, outputFile, shard) {
|
||||
console.log(`E2e specs for shard ${shardParts.join('/')}:`);
|
||||
logSpecs(e2eSpecPaths);
|
||||
|
||||
return e2eSpecPaths.systemjs.reduce((promise, specPath) => {
|
||||
return e2eSpecPaths.systemjs
|
||||
.reduce(
|
||||
(promise, specPath) => {
|
||||
return promise.then(() => {
|
||||
const examplePath = path.dirname(specPath);
|
||||
return runE2eTestsSystemJS(examplePath, outputFile).then(ok => {
|
||||
@ -101,7 +117,8 @@ function findAndRunE2eTests(filter, outputFile, shard) {
|
||||
arr.push(examplePath);
|
||||
});
|
||||
});
|
||||
}, Promise.resolve())
|
||||
},
|
||||
Promise.resolve())
|
||||
.then(() => {
|
||||
return e2eSpecPaths.cli.reduce((promise, specPath) => {
|
||||
return promise.then(() => {
|
||||
@ -152,12 +169,13 @@ function runProtractorSystemJS(prepPromise, appDir, appRunSpawnInfo, outputFile)
|
||||
|
||||
// Start protractor.
|
||||
console.log(`\n\n=========== Running aio example tests for: ${appDir}`);
|
||||
const spawnInfo = spawnExt('yarn', ['protractor',
|
||||
PROTRACTOR_CONFIG_FILENAME,
|
||||
`--specs=${specFilename}`,
|
||||
'--params.appDir=' + appDir,
|
||||
'--params.outputFile=' + outputFile
|
||||
], { cwd: SHARED_PATH });
|
||||
const spawnInfo = spawnExt(
|
||||
'yarn',
|
||||
[
|
||||
'protractor', PROTRACTOR_CONFIG_FILENAME, `--specs=${specFilename}`,
|
||||
'--params.appDir=' + appDir, '--params.outputFile=' + outputFile
|
||||
],
|
||||
{cwd: SHARED_PATH});
|
||||
|
||||
spawnInfo.proc.stderr.on('data', function(data) {
|
||||
transpileError = transpileError || /npm ERR! Exit status 100/.test(data.toString());
|
||||
@ -173,8 +191,7 @@ function runProtractorSystemJS(prepPromise, appDir, appRunSpawnInfo, outputFile)
|
||||
})
|
||||
.then(
|
||||
function() { return finish(appRunSpawnInfo.proc.pid, true); },
|
||||
function () { return finish(appRunSpawnInfo.proc.pid, false); }
|
||||
);
|
||||
function() { return finish(appRunSpawnInfo.proc.pid, false); });
|
||||
}
|
||||
|
||||
function finish(spawnProcId, ok) {
|
||||
@ -206,7 +223,11 @@ function runE2eTestsCLI(appDir, outputFile) {
|
||||
console.log(`\n\n=========== Running aio example tests for: ${appDir}`);
|
||||
// `--no-webdriver-update` is needed to preserve the ChromeDriver version already installed.
|
||||
const config = loadExampleConfig(appDir);
|
||||
<<<<<<< HEAD
|
||||
const commands = config.e2e || [{cmd: 'yarn', args: ['e2e', '--no-webdriver-update']}];
|
||||
=======
|
||||
const commands = config.e2e || [{cmd: 'yarn', args: ['e2e', '--prod', '--no-webdriver-update']}];
|
||||
>>>>>>> c8a0ce7388... test(ivy): enable more docs examples e2e tests (#28688)
|
||||
|
||||
const e2eSpawnPromise = commands.reduce((prevSpawnPromise, {cmd, args}) => {
|
||||
return prevSpawnPromise.then(() => {
|
||||
@ -218,25 +239,27 @@ function runE2eTestsCLI(appDir, outputFile) {
|
||||
}, Promise.resolve());
|
||||
|
||||
return e2eSpawnPromise.then(
|
||||
() => { fs.appendFileSync(outputFile, `Passed: ${appDir}\n\n`); return true; },
|
||||
() => { fs.appendFileSync(outputFile, `Failed: ${appDir}\n\n`); return false; });
|
||||
() => {
|
||||
fs.appendFileSync(outputFile, `Passed: ${appDir}\n\n`);
|
||||
return true;
|
||||
},
|
||||
() => {
|
||||
fs.appendFileSync(outputFile, `Failed: ${appDir}\n\n`);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// Report final status.
|
||||
function reportStatus(status, outputFile) {
|
||||
let log = [''];
|
||||
log.push('Suites passed:');
|
||||
status.passed.forEach(function (val) {
|
||||
log.push(' ' + val);
|
||||
});
|
||||
status.passed.forEach(function(val) { log.push(' ' + val); });
|
||||
|
||||
if (status.failed.length == 0) {
|
||||
log.push('All tests passed');
|
||||
} else {
|
||||
log.push('Suites failed:');
|
||||
status.failed.forEach(function (val) {
|
||||
log.push(' ' + val);
|
||||
});
|
||||
status.failed.forEach(function(val) { log.push(' ' + val); });
|
||||
}
|
||||
log.push('\nElapsed time: ' + status.elapsedTime + ' seconds');
|
||||
log = log.join('\n');
|
||||
@ -257,12 +280,8 @@ function spawnExt(command, args, options, ignoreClose = false) {
|
||||
reject(e);
|
||||
return {proc: null, promise};
|
||||
}
|
||||
proc.stdout.on('data', function (data) {
|
||||
process.stdout.write(data.toString());
|
||||
});
|
||||
proc.stderr.on('data', function (data) {
|
||||
process.stdout.write(data.toString());
|
||||
});
|
||||
proc.stdout.on('data', function(data) { process.stdout.write(data.toString()); });
|
||||
proc.stderr.on('data', function(data) { process.stdout.write(data.toString()); });
|
||||
proc.on('close', function(returnCode) {
|
||||
console.log(`completed: ${descr} \n`);
|
||||
// Many tasks (e.g., tsc) complete but are actually errors;
|
||||
@ -281,42 +300,45 @@ function spawnExt(command, args, options, ignoreClose = false) {
|
||||
function getE2eSpecs(basePath, filter) {
|
||||
let specs = {};
|
||||
|
||||
return getE2eSpecsFor(basePath, SJS_SPEC_FILENAME, filter).then(sjsPaths => {
|
||||
specs.systemjs = sjsPaths;
|
||||
}).then(() => {
|
||||
return getE2eSpecsFor(basePath, SJS_SPEC_FILENAME, filter)
|
||||
.then(sjsPaths => { specs.systemjs = sjsPaths; })
|
||||
.then(() => {
|
||||
return getE2eSpecsFor(basePath, CLI_SPEC_FILENAME, filter).then(cliPaths => {
|
||||
return cliPaths.map(p => {
|
||||
return p.replace(`${CLI_SPEC_FILENAME}`, '');
|
||||
return cliPaths.map(p => { return p.replace(`${CLI_SPEC_FILENAME}`, ''); });
|
||||
});
|
||||
});
|
||||
}).then(cliPaths => {
|
||||
specs.cli = cliPaths;
|
||||
}).then(() => specs);
|
||||
})
|
||||
.then(cliPaths => { specs.cli = cliPaths; })
|
||||
.then(() => specs);
|
||||
}
|
||||
|
||||
// Find all e2e specs in a given example folder.
|
||||
function getE2eSpecsFor(basePath, specFile, filter) {
|
||||
// Only get spec file at the example root.
|
||||
<<<<<<< HEAD
|
||||
const e2eSpecGlob = `${filter ? ` * ${filter} * ` : '*'}/${specFile}`;
|
||||
return globby(e2eSpecGlob, {cwd: basePath, nodir: true})
|
||||
.then(paths => paths
|
||||
.filter(file => !IGNORED_EXAMPLES.some(ignored => file.startsWith(ignored)))
|
||||
.map(file => path.join(basePath, file))
|
||||
);
|
||||
.then(
|
||||
paths => paths.filter(file => !IGNORED_EXAMPLES.some(ignored => file.startsWith(ignored)))
|
||||
.map(file => path.join(basePath, file)));
|
||||
=======
|
||||
const e2eSpecGlob = `${filter ? '*' + filter + '*' : '*'}/${specFile}`;
|
||||
return globby(e2eSpecGlob, {cwd: basePath, nodir: true})
|
||||
.then(
|
||||
paths => paths.filter(file => !IGNORED_EXAMPLES.some(ignored => file.startsWith(ignored)))
|
||||
.map(file => path.join(basePath, file)));
|
||||
>>>>>>> c8a0ce7388... test(ivy): enable more docs examples e2e tests (#28688)
|
||||
}
|
||||
|
||||
// Load configuration for an example. Used for SystemJS
|
||||
function loadExampleConfig(exampleFolder) {
|
||||
// Default config.
|
||||
let config = {
|
||||
build: 'build',
|
||||
run: 'serve:e2e'
|
||||
};
|
||||
let config = {build: 'build', run: 'serve:e2e'};
|
||||
|
||||
try {
|
||||
const exampleConfig = fs.readJsonSync(`${exampleFolder}/${EXAMPLE_CONFIG_FILENAME}`);
|
||||
Object.assign(config, exampleConfig);
|
||||
} catch (e) { }
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user