fix(tests): accomodate isplaywrightready (#1746)

This commit is contained in:
Dmitry Gozman 2020-04-10 20:31:50 -07:00 committed by GitHub
parent cd2ecb2212
commit bf656ea318
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 191 additions and 177 deletions

View file

@ -20,26 +20,27 @@ const readline = require('readline');
const TestRunner = require('../utils/testrunner/'); const TestRunner = require('../utils/testrunner/');
const {Environment} = require('../utils/testrunner/Test'); const {Environment} = require('../utils/testrunner/Test');
let parallel = 1; function collect(browserNames) {
if (process.env.PW_PARALLEL_TESTS) let parallel = 1;
if (process.env.PW_PARALLEL_TESTS)
parallel = parseInt(process.env.PW_PARALLEL_TESTS.trim(), 10); parallel = parseInt(process.env.PW_PARALLEL_TESTS.trim(), 10);
const parallelArgIndex = process.argv.indexOf('-j'); const parallelArgIndex = process.argv.indexOf('-j');
if (parallelArgIndex !== -1) if (parallelArgIndex !== -1)
parallel = parseInt(process.argv[parallelArgIndex + 1], 10); parallel = parseInt(process.argv[parallelArgIndex + 1], 10);
require('events').defaultMaxListeners *= parallel; require('events').defaultMaxListeners *= parallel;
let timeout = process.env.CI ? 30 * 1000 : 10 * 1000; let timeout = process.env.CI ? 30 * 1000 : 10 * 1000;
if (!isNaN(process.env.TIMEOUT)) if (!isNaN(process.env.TIMEOUT))
timeout = parseInt(process.env.TIMEOUT * 1000, 10); timeout = parseInt(process.env.TIMEOUT * 1000, 10);
const MAJOR_NODEJS_VERSION = parseInt(process.version.substring(1).split('.')[0], 10); const MAJOR_NODEJS_VERSION = parseInt(process.version.substring(1).split('.')[0], 10);
if (MAJOR_NODEJS_VERSION >= 8 && require('inspector').url()) { if (MAJOR_NODEJS_VERSION >= 8 && require('inspector').url()) {
console.log('Detected inspector - disabling timeout to be debugger-friendly'); console.log('Detected inspector - disabling timeout to be debugger-friendly');
timeout = 0; timeout = 0;
} }
const config = require('./test.config'); const config = require('./test.config');
const testRunner = new TestRunner({ const testRunner = new TestRunner({
timeout, timeout,
totalTimeout: process.env.CI ? 15 * 60 * 1000 : 0, totalTimeout: process.env.CI ? 15 * 60 * 1000 : 0,
parallel, parallel,
@ -48,38 +49,32 @@ const testRunner = new TestRunner({
summary: !process.argv.includes('--verbose'), summary: !process.argv.includes('--verbose'),
showSlowTests: process.env.CI ? 5 : 0, showSlowTests: process.env.CI ? 5 : 0,
showMarkedAsFailingTests: 10, showMarkedAsFailingTests: 10,
}); });
if (config.setupTestRunner) if (config.setupTestRunner)
config.setupTestRunner(testRunner); config.setupTestRunner(testRunner);
console.log('Testing on Node', process.version); for (const [key, value] of Object.entries(testRunner.api()))
const browserNames = ['chromium', 'firefox', 'webkit'].filter(name => {
return process.env.BROWSER === name || process.env.BROWSER === 'all';
});
for (const [key, value] of Object.entries(testRunner.api()))
global[key] = value; global[key] = value;
// TODO: this should be a preinstalled playwright by default. // TODO: this should be a preinstalled playwright by default.
const playwrightPath = config.playwrightPath; const playwrightPath = config.playwrightPath;
const playwright = require(playwrightPath); const playwright = require(playwrightPath);
const playwrightEnvironment = new Environment('Playwright'); const playwrightEnvironment = new Environment('Playwright');
playwrightEnvironment.beforeAll(async state => { playwrightEnvironment.beforeAll(async state => {
state.playwright = playwright; state.playwright = playwright;
global.playwright = playwright; global.playwright = playwright;
}); });
playwrightEnvironment.afterAll(async state => { playwrightEnvironment.afterAll(async state => {
delete state.playwright; delete state.playwright;
delete global.playwright; delete global.playwright;
}); });
testRunner.collector().useEnvironment(playwrightEnvironment); testRunner.collector().useEnvironment(playwrightEnvironment);
for (const e of config.globalEnvironments || []) for (const e of config.globalEnvironments || [])
testRunner.collector().useEnvironment(e); testRunner.collector().useEnvironment(e);
for (const browserName of browserNames) { for (const browserName of browserNames) {
const browserType = playwright[browserName]; const browserType = playwright[browserName];
const browserTypeEnvironment = new Environment('BrowserType'); const browserTypeEnvironment = new Environment('BrowserType');
browserTypeEnvironment.beforeAll(async state => { browserTypeEnvironment.beforeAll(async state => {
@ -192,17 +187,29 @@ for (const browserName of browserNames) {
delete global.browserType; delete global.browserType;
delete global.playwright; delete global.playwright;
}); });
} }
for (const [key, value] of Object.entries(testRunner.api())) { for (const [key, value] of Object.entries(testRunner.api())) {
// expect is used when running tests, while the rest of api is not. // expect is used when running tests, while the rest of api is not.
if (key !== 'expect') if (key !== 'expect')
delete global[key]; delete global[key];
} }
const filterArgIndex = process.argv.indexOf('--filter'); const filterArgIndex = process.argv.indexOf('--filter');
if (filterArgIndex !== -1) { if (filterArgIndex !== -1) {
const filter = process.argv[filterArgIndex + 1]; const filter = process.argv[filterArgIndex + 1];
testRunner.focusMatchingTests(new RegExp(filter, 'i')); testRunner.focusMatchingTests(new RegExp(filter, 'i'));
}
return testRunner;
} }
testRunner.run().then(() => { delete global.expect; }); module.exports = collect;
if (require.main === module) {
console.log('Testing on Node', process.version);
const browserNames = ['chromium', 'firefox', 'webkit'].filter(name => {
return process.env.BROWSER === name || process.env.BROWSER === 'all';
});
const testRunner = collect(browserNames);
testRunner.run().then(() => { delete global.expect; });
}

View file

@ -27,6 +27,8 @@ const PROJECT_ROOT = fs.existsSync(path.join(__dirname, '..', 'package.json')) ?
const mkdtempAsync = util.promisify(require('fs').mkdtemp); const mkdtempAsync = util.promisify(require('fs').mkdtemp);
const removeFolderAsync = util.promisify(removeFolder); const removeFolderAsync = util.promisify(removeFolder);
let platform = os.platform();
const utils = module.exports = { const utils = module.exports = {
/** /**
* @return {string} * @return {string}
@ -182,9 +184,9 @@ const utils = module.exports = {
FFOX: browserType.name() === 'firefox', FFOX: browserType.name() === 'firefox',
WEBKIT: browserType.name() === 'webkit', WEBKIT: browserType.name() === 'webkit',
CHROMIUM: browserType.name() === 'chromium', CHROMIUM: browserType.name() === 'chromium',
MAC: os.platform() === 'darwin', MAC: platform === 'darwin',
LINUX: os.platform() === 'linux', LINUX: platform === 'linux',
WIN: os.platform() === 'win32', WIN: platform === 'win32',
browserType, browserType,
defaultBrowserOptions, defaultBrowserOptions,
playwrightPath: PROJECT_ROOT, playwrightPath: PROJECT_ROOT,
@ -193,6 +195,11 @@ const utils = module.exports = {
OUTPUT_DIR, OUTPUT_DIR,
}; };
}, },
setPlatform(p) {
// To support isplaywrightready.
platform = p;
},
}; };
function valueFromEnv(name, defaultValue) { function valueFromEnv(name, defaultValue) {