RandomSec/main/tests/cypress/build-test-matrix.js
Florian Giroud bd9b268dea
Cypress parallel manual (#3922)
Implemented parallelism fo Cypress Tests
2021-05-27 15:18:20 +02:00

87 lines
2.5 KiB
JavaScript

const glob = require('glob');
// Those specs paths are glob patterns
const groups = [
{
specs: [
'cypress/integration/create-project/**/*.spec.js',
'cypress/integration/extensions/**/*.spec.js',
'cypress/integration/import-project/**/*.spec.js',
'cypress/integration/language/**/*.spec.js',
'cypress/integration/open-project/**/*.spec.js',
'cypress/integration/preferences/**/*.spec.js',
'cypress/integration/project_management/**/*.spec.js',
],
},
{
specs: [
'cypress/integration/project/grid/all-column/**/*.spec.js',
'cypress/integration/project/grid/column/*.spec.js',
'cypress/integration/project/grid/column/edit-cells/**/*.spec.js',
],
},
{
specs: [
'cypress/integration/project/grid/column/edit-column/**/*.spec.js',
'cypress/integration/project/grid/column/facet/**/*.spec.js',
'cypress/integration/project/grid/column/facet/reconcile/**/*.spec.js',
],
},
{
specs: [
'cypress/integration/project/grid/column/transpose/**/*.spec.js',
'cypress/integration/project/grid/column/view/**/*.spec.js',
'cypress/integration/project/grid/column/reconcile/**/*.spec.js',
],
},
{
specs: [
'cypress/integration/project/grid/misc/**/*.spec.js',
'cypress/integration/project/grid/row/**/*.spec.js',
'cypress/integration/project/grid/viewpanel-header/**/*.spec.js',
],
},
{
specs: [
'cypress/integration/project/project-header/**/*.spec.js',
'cypress/integration/project/undo_redo/**/*.spec.js',
'cypress/integration/tutorial/*.spec.js',
],
},
];
const mergedGroups = groups.map((group) => group.specs.join(','));
// step1 ,find files matched by existing groups
const matchedFiles = [];
groups.forEach((group) => {
group.specs.forEach((pattern) => {
const files = glob.sync(`main/tests/cypress/${pattern}`);
matchedFiles.push(...files);
});
});
// step2 , add a last group that contains missed files
const allSpecFiles = glob.sync(
`./main/tests/cypress/cypress/integration/**/*.spec.js`
);
const missedFiles = [];
for (const file of allSpecFiles) {
const relativeFile = file.substring('./main/tests/cypress/'.length);
if (!matchedFiles.includes(file.substring(2))) {
missedFiles.push(relativeFile);
}
}
if (missedFiles.length) {
mergedGroups.push(missedFiles.join(','));
}
const browsers = process.env.browsers.split(',');
console.log(
`::set-output name=matrix::{"browser":${JSON.stringify(
browsers
)}, "specs":${JSON.stringify(mergedGroups)}}`
);