testcafe
Version:
Automated browser testing for the modern web development stack.
71 lines • 9.73 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const moment_1 = __importDefault(require("moment"));
const capturer_1 = __importDefault(require("./capturer"));
const path_pattern_1 = __importDefault(require("../utils/path-pattern"));
const get_common_path_1 = __importDefault(require("../utils/get-common-path"));
const default_extension_1 = __importDefault(require("./default-extension"));
class Screenshots {
constructor({ enabled, path, pathPattern, pathPatternOnFails, fullPage, thumbnails }) {
this.enabled = enabled;
this.screenshotsPath = path;
this.screenshotsPattern = pathPattern;
this.screenshotsPatternOnFails = pathPatternOnFails;
this.fullPage = fullPage;
this.thumbnails = thumbnails;
this.testEntries = [];
this.now = (0, moment_1.default)();
}
_addTestEntry(test) {
const testEntry = {
test: test,
testRuns: {},
screenshots: [],
};
this.testEntries.push(testEntry);
return testEntry;
}
_getTestEntry(test) {
return (0, lodash_1.find)(this.testEntries, entry => entry.test === test);
}
_ensureTestEntry(test) {
let testEntry = this._getTestEntry(test);
if (!testEntry)
testEntry = this._addTestEntry(test);
return testEntry;
}
getScreenshotsInfo(test) {
return this._getTestEntry(test).screenshots;
}
hasCapturedFor(test) {
return this.getScreenshotsInfo(test).length > 0;
}
getPathFor(test) {
const testEntry = this._getTestEntry(test);
const screenshotPaths = testEntry.screenshots.map(screenshot => screenshot.screenshotPath);
return (0, get_common_path_1.default)(screenshotPaths);
}
createCapturerFor(test, testIndex, quarantine, connection, warningLog) {
const testEntry = this._ensureTestEntry(test);
const pathPattern = new path_pattern_1.default(this.screenshotsPattern, default_extension_1.default, {
testIndex,
quarantineAttempt: quarantine ? quarantine.getNextAttemptNumber() : null,
now: this.now,
fixture: test.fixture.name,
test: test.name,
parsedUserAgent: connection.browserInfo.parsedUserAgent,
}, this.screenshotsPatternOnFails);
return new capturer_1.default(this.screenshotsPath, testEntry, connection, pathPattern, this.fullPage, this.thumbnails, warningLog);
}
addTestRun(test, testRun) {
const testEntry = this._getTestEntry(test);
testEntry.testRuns[testRun.browserConnection.id] = testRun;
}
}
exports.default = Screenshots;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyZWVuc2hvdHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDBEQUFrQztBQUNsQyx5RUFBZ0Q7QUFDaEQsK0VBQXFEO0FBQ3JELDRFQUErRDtBQUcvRCxNQUFxQixXQUFXO0lBQzVCLFlBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFO1FBQ2pGLElBQUksQ0FBQyxPQUFPLEdBQXFCLE9BQU8sQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFhLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQVUsV0FBVyxDQUFDO1FBQzdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxrQkFBa0IsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFvQixRQUFRLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBa0IsVUFBVSxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxHQUF5QixJQUFBLGdCQUFNLEdBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsYUFBYSxDQUFFLElBQUk7UUFDZixNQUFNLFNBQVMsR0FBRztZQUNkLElBQUksRUFBUyxJQUFJO1lBQ2pCLFFBQVEsRUFBSyxFQUFFO1lBQ2YsV0FBVyxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxhQUFhLENBQUUsSUFBSTtRQUNmLE9BQU8sSUFBQSxhQUFJLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGdCQUFnQixDQUFFLElBQUk7UUFDbEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsU0FBUztZQUNWLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0IsQ0FBRSxJQUFJO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDaEQsQ0FBQztJQUVELGNBQWMsQ0FBRSxJQUFJO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFVBQVUsQ0FBRSxJQUFJO1FBQ1osTUFBTSxTQUFTLEdBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzRixPQUFPLElBQUEseUJBQWEsRUFBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsaUJBQWlCLENBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7UUFDbEUsTUFBTSxTQUFTLEdBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sV0FBVyxHQUFHLElBQUksc0JBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsMkJBQTRCLEVBQUU7WUFDdkYsU0FBUztZQUNULGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDeEUsR0FBRyxFQUFnQixJQUFJLENBQUMsR0FBRztZQUMzQixPQUFPLEVBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ3BDLElBQUksRUFBZSxJQUFJLENBQUMsSUFBSTtZQUM1QixlQUFlLEVBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxlQUFlO1NBQzVELEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFbkMsT0FBTyxJQUFJLGtCQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUVELFVBQVUsQ0FBRSxJQUFJLEVBQUUsT0FBTztRQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUMvRCxDQUFDO0NBQ0o7QUF2RUQsOEJBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmluZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgQ2FwdHVyZXIgZnJvbSAnLi9jYXB0dXJlcic7XG5pbXBvcnQgUGF0aFBhdHRlcm4gZnJvbSAnLi4vdXRpbHMvcGF0aC1wYXR0ZXJuJztcbmltcG9ydCBnZXRDb21tb25QYXRoIGZyb20gJy4uL3V0aWxzL2dldC1jb21tb24tcGF0aCc7XG5pbXBvcnQgREVGQVVMVF9TQ1JFRU5TSE9UX0VYVEVOU0lPTiBmcm9tICcuL2RlZmF1bHQtZXh0ZW5zaW9uJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JlZW5zaG90cyB7XG4gICAgY29uc3RydWN0b3IgKHsgZW5hYmxlZCwgcGF0aCwgcGF0aFBhdHRlcm4sIHBhdGhQYXR0ZXJuT25GYWlscywgZnVsbFBhZ2UsIHRodW1ibmFpbHMgfSkge1xuICAgICAgICB0aGlzLmVuYWJsZWQgICAgICAgICAgICAgICAgICAgPSBlbmFibGVkO1xuICAgICAgICB0aGlzLnNjcmVlbnNob3RzUGF0aCAgICAgICAgICAgPSBwYXRoO1xuICAgICAgICB0aGlzLnNjcmVlbnNob3RzUGF0dGVybiAgICAgICAgPSBwYXRoUGF0dGVybjtcbiAgICAgICAgdGhpcy5zY3JlZW5zaG90c1BhdHRlcm5PbkZhaWxzID0gcGF0aFBhdHRlcm5PbkZhaWxzO1xuICAgICAgICB0aGlzLmZ1bGxQYWdlICAgICAgICAgICAgICAgICAgPSBmdWxsUGFnZTtcbiAgICAgICAgdGhpcy50aHVtYm5haWxzICAgICAgICAgICAgICAgID0gdGh1bWJuYWlscztcbiAgICAgICAgdGhpcy50ZXN0RW50cmllcyAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMubm93ICAgICAgICAgICAgICAgICAgICAgICA9IG1vbWVudCgpO1xuICAgIH1cblxuICAgIF9hZGRUZXN0RW50cnkgKHRlc3QpIHtcbiAgICAgICAgY29uc3QgdGVzdEVudHJ5ID0ge1xuICAgICAgICAgICAgdGVzdDogICAgICAgIHRlc3QsXG4gICAgICAgICAgICB0ZXN0UnVuczogICAge30sXG4gICAgICAgICAgICBzY3JlZW5zaG90czogW10sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50ZXN0RW50cmllcy5wdXNoKHRlc3RFbnRyeSk7XG5cbiAgICAgICAgcmV0dXJuIHRlc3RFbnRyeTtcbiAgICB9XG5cbiAgICBfZ2V0VGVzdEVudHJ5ICh0ZXN0KSB7XG4gICAgICAgIHJldHVybiBmaW5kKHRoaXMudGVzdEVudHJpZXMsIGVudHJ5ID0+IGVudHJ5LnRlc3QgPT09IHRlc3QpO1xuICAgIH1cblxuICAgIF9lbnN1cmVUZXN0RW50cnkgKHRlc3QpIHtcbiAgICAgICAgbGV0IHRlc3RFbnRyeSA9IHRoaXMuX2dldFRlc3RFbnRyeSh0ZXN0KTtcblxuICAgICAgICBpZiAoIXRlc3RFbnRyeSlcbiAgICAgICAgICAgIHRlc3RFbnRyeSA9IHRoaXMuX2FkZFRlc3RFbnRyeSh0ZXN0KTtcblxuICAgICAgICByZXR1cm4gdGVzdEVudHJ5O1xuICAgIH1cblxuICAgIGdldFNjcmVlbnNob3RzSW5mbyAodGVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VGVzdEVudHJ5KHRlc3QpLnNjcmVlbnNob3RzO1xuICAgIH1cblxuICAgIGhhc0NhcHR1cmVkRm9yICh0ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcmVlbnNob3RzSW5mbyh0ZXN0KS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldFBhdGhGb3IgKHRlc3QpIHtcbiAgICAgICAgY29uc3QgdGVzdEVudHJ5ICAgICAgID0gdGhpcy5fZ2V0VGVzdEVudHJ5KHRlc3QpO1xuICAgICAgICBjb25zdCBzY3JlZW5zaG90UGF0aHMgPSB0ZXN0RW50cnkuc2NyZWVuc2hvdHMubWFwKHNjcmVlbnNob3QgPT4gc2NyZWVuc2hvdC5zY3JlZW5zaG90UGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIGdldENvbW1vblBhdGgoc2NyZWVuc2hvdFBhdGhzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVDYXB0dXJlckZvciAodGVzdCwgdGVzdEluZGV4LCBxdWFyYW50aW5lLCBjb25uZWN0aW9uLCB3YXJuaW5nTG9nKSB7XG4gICAgICAgIGNvbnN0IHRlc3RFbnRyeSAgID0gdGhpcy5fZW5zdXJlVGVzdEVudHJ5KHRlc3QpO1xuICAgICAgICBjb25zdCBwYXRoUGF0dGVybiA9IG5ldyBQYXRoUGF0dGVybih0aGlzLnNjcmVlbnNob3RzUGF0dGVybiwgREVGQVVMVF9TQ1JFRU5TSE9UX0VYVEVOU0lPTiwge1xuICAgICAgICAgICAgdGVzdEluZGV4LFxuICAgICAgICAgICAgcXVhcmFudGluZUF0dGVtcHQ6IHF1YXJhbnRpbmUgPyBxdWFyYW50aW5lLmdldE5leHRBdHRlbXB0TnVtYmVyKCkgOiBudWxsLFxuICAgICAgICAgICAgbm93OiAgICAgICAgICAgICAgIHRoaXMubm93LFxuICAgICAgICAgICAgZml4dHVyZTogICAgICAgICAgIHRlc3QuZml4dHVyZS5uYW1lLFxuICAgICAgICAgICAgdGVzdDogICAgICAgICAgICAgIHRlc3QubmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFVzZXJBZ2VudDogICBjb25uZWN0aW9uLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudCxcbiAgICAgICAgfSwgdGhpcy5zY3JlZW5zaG90c1BhdHRlcm5PbkZhaWxzKTtcblxuICAgICAgICByZXR1cm4gbmV3IENhcHR1cmVyKHRoaXMuc2NyZWVuc2hvdHNQYXRoLCB0ZXN0RW50cnksIGNvbm5lY3Rpb24sIHBhdGhQYXR0ZXJuLCB0aGlzLmZ1bGxQYWdlLCB0aGlzLnRodW1ibmFpbHMsIHdhcm5pbmdMb2cpO1xuICAgIH1cblxuICAgIGFkZFRlc3RSdW4gKHRlc3QsIHRlc3RSdW4pIHtcbiAgICAgICAgY29uc3QgdGVzdEVudHJ5ID0gdGhpcy5fZ2V0VGVzdEVudHJ5KHRlc3QpO1xuXG4gICAgICAgIHRlc3RFbnRyeS50ZXN0UnVuc1t0ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uLmlkXSA9IHRlc3RSdW47XG4gICAgfVxufVxuIl19