protractor-smartrunner
Version:
Protractor utility for keeping track of passed/failed tests between runs. Works together with protractor-retry.
54 lines (53 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SmartRunner = void 0;
const smartrunner_results_1 = require("./smartrunner-results");
const smartrunner_reporter_1 = require("./smartrunner-reporter");
const logger_1 = require("protractor/built/logger");
const fs = require('fs-extra');
const LOGGER_ID = 'smartrunner';
const DEFAULT_OPTIONS = {
outputDirectory: './.protractor-smartrunner',
passedMessagePrefix: '🟢 previously passed:'
};
class SmartRunner {
constructor(options) {
this.options = options;
this.logger = new logger_1.Logger(LOGGER_ID);
this.results = new smartrunner_results_1.SmartRunnerResults(this.options.outputDirectory, this.options.repoHash, this.logger);
this.results.load();
this.setupJasmine();
}
static apply(options) {
return new SmartRunner(Object.assign(Object.assign({}, DEFAULT_OPTIONS), options));
}
static withOptionalExclusions(filePath) {
const logger = new logger_1.Logger(LOGGER_ID);
const cliGrepped = process.argv.some((argument) => /^-g=/.test(argument) || /^--grep=/.test(argument));
if (!cliGrepped && fs.existsSync(filePath)) {
const exclusions = Object.keys(require(filePath));
if (exclusions.length) {
logger.info('🚫 Exclusion patterns: ', exclusions.join(', '));
return {
grep: exclusions.join('|'),
invertGrep: true
};
}
}
return {};
}
setupJasmine() {
jasmine.getEnv().addReporter(new smartrunner_reporter_1.SmartRunnerReporter(this.results));
const oldSpecFilter = jasmine.getEnv().specFilter;
jasmine.getEnv().specFilter = (spec) => {
const testName = spec.getResult().description;
const suiteName = spec.getFullName().replace(testName, '').trim();
const testPassedInPreviousRun = this.results.get(suiteName, testName);
if (testPassedInPreviousRun.passed) {
this.logger.info(`${this.options.passedMessagePrefix} ${suiteName} ${testName}`);
}
return !testPassedInPreviousRun.passed && oldSpecFilter(spec);
};
}
}
exports.SmartRunner = SmartRunner;