Files
ionic-framework/packages/core/scripts/e2e-test-runner.js
2017-11-03 13:52:54 -05:00

89 lines
1.9 KiB
JavaScript

'use strict';
const fs = require('fs');
const glob = require('glob');
const Mocha = require('mocha');
const path = require('path');
const webdriver = require('selenium-webdriver');
const Snapshot = require('./Snapshot');
let snapshot;
let takeScreenshots = false;
function startDevServer() {
const server = require('@stencil/dev-server/dist'); // TODO: fix after stencil-dev-server PR #16 is merged
const cmdArgs = ['--config', path.join(__dirname, '../stencil.config.js'), '--no-open'];
return server.run(cmdArgs);
}
function getTestFiles() {
return new Promise((resolve, reject) => {
const src = path.join(__dirname, '../src/**/*.e2e-spec.js');
glob(src, (err, files) => {
if (err) {
reject(err);
} else {
resolve(files);
}
});
});
}
function processCommandLine() {
process.argv.forEach(arg => {
if (arg === '--snapshot') {
takeScreenshots = true;
}
});
}
function registerE2ETest(desc, tst) {
// NOTE: Do not use an arrow function here because: https://mochajs.org/#arrow-functions
it(desc, async function() {
const driver = new webdriver.Builder().forBrowser('chrome').build();
await tst(driver);
if (takeScreenshots) {
await snapshot.takeScreenshot(driver, {
name: this.test.fullTitle()
});
}
return driver.quit();
});
}
async function run() {
const mocha = new Mocha({
timeout: 5000,
slow: 2000
});
processCommandLine();
snapshot = new Snapshot({
platformDefaults: {
params: {
height: 800,
width: 400
}
}
});
const devServer = await startDevServer();
const files = await getTestFiles();
files.forEach(f => mocha.addFile(f));
mocha.run(function(failures) {
process.on('exit', function() {
process.exit(failures); // exit with non-zero status if there were failures
});
devServer.close();
});
}
module.exports = {
register: registerE2ETest,
run: run
};