42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
|
const Sequencer = require('@jest/test-sequencer').default;
|
||
|
|
||
|
class ParallelCISequencer extends Sequencer {
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.ciNodeIndex = Number(process.env.CI_NODE_INDEX || '1');
|
||
|
this.ciNodeTotal = Number(process.env.CI_NODE_TOTAL || '1');
|
||
|
}
|
||
|
|
||
|
sort(tests) {
|
||
|
const sortedTests = this.sortByPath(tests);
|
||
|
const testsForThisRunner = this.distributeAcrossCINodes(sortedTests);
|
||
|
|
||
|
console.log(`CI_NODE_INDEX: ${this.ciNodeIndex}`);
|
||
|
console.log(`CI_NODE_TOTAL: ${this.ciNodeTotal}`);
|
||
|
console.log(`Total number of tests: ${tests.length}`);
|
||
|
console.log(`Total number of tests for this runner: ${testsForThisRunner.length}`);
|
||
|
|
||
|
return testsForThisRunner;
|
||
|
}
|
||
|
|
||
|
sortByPath(tests) {
|
||
|
return tests.sort((test1, test2) => {
|
||
|
if (test1.path < test2.path) {
|
||
|
return -1;
|
||
|
}
|
||
|
if (test1.path > test2.path) {
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
distributeAcrossCINodes(tests) {
|
||
|
return tests.filter((test, index) => {
|
||
|
return index % this.ciNodeTotal === this.ciNodeIndex - 1;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = ParallelCISequencer;
|