@oaklean/profiler-jest-environment
Version:
A jest environment to collect energy measurements on source code level during test execution.
117 lines • 10.2 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const profiler_1 = require("@oaklean/profiler");
const profiler_core_1 = require("@oaklean/profiler-core");
// Jest Environments
const jest_environment_node_1 = __importDefault(require("jest-environment-node"));
const jest_environment_jsdom_1 = __importDefault(require("jest-environment-jsdom"));
const constants_1 = require("./constants");
class CustomEnvironment {
get global() {
return this.environment.global;
}
get fakeTimers() {
return this.environment.fakeTimers;
}
get fakeTimersModern() {
return this.environment.fakeTimersModern;
}
get moduleMocker() {
return this.environment.moduleMocker;
}
getVmContext() {
return this.environment.getVmContext();
}
exportConditions() {
return this.environment.exportConditions();
}
constructor(config, context) {
switch (config.projectConfig.testEnvironmentOptions['testEnvironment']) {
case 'jsdom':
this.environment = new jest_environment_jsdom_1.default(config, context);
break;
case 'node':
default:
this.environment = new jest_environment_node_1.default(config, context);
break;
}
const rootDir = new profiler_core_1.UnifiedPath(config.projectConfig.rootDir);
this.testPath = rootDir.pathTo(new profiler_core_1.UnifiedPath(context.testPath));
this.global.jestConfig = config;
this.global.jestContext = context;
if (constants_1.ENABLE_MEASUREMENTS) {
this.profiler = new profiler_1.Profiler('jest');
}
this.ranSuccessfully = true;
}
getExecutionDetails(profiler, config) {
return __awaiter(this, void 0, void 0, function* () {
const executionDetailsPath = profiler.exportAssetHelper.outputExecutionDetailsPath();
let executionDetails = profiler_core_1.ExecutionDetails.loadFromFile(executionDetailsPath);
if (executionDetails === undefined) {
executionDetails = yield profiler_core_1.ExecutionDetails.resolveExecutionDetails(config);
executionDetails.origin = profiler_core_1.ProjectReportOrigin.jestEnv;
profiler_core_1.ExecutionDetails.storeToFile(executionDetails, executionDetailsPath);
}
return executionDetails;
});
}
setup() {
return __awaiter(this, void 0, void 0, function* () {
yield this.environment.setup();
if (constants_1.ENABLE_MEASUREMENTS && this.profiler) {
const performance = new profiler_core_1.PerformanceHelper();
try {
performance.start('jestEnv.env.setup');
performance.start('jestEnv.env.resolveConfig');
const config = profiler_core_1.ProfilerConfig.autoResolve();
performance.stop('jestEnv.env.resolveConfig');
performance.start('jestEnv.env.resolveExecutionDetails');
const executionDetails = yield this.getExecutionDetails(this.profiler, config);
performance.stop('jestEnv.env.resolveExecutionDetails');
performance.stop('jestEnv.env.setup');
performance.printReport('jestEnv.env.setup');
performance.exportAndSum(this.profiler.exportAssetHelper.outputPerformancePath());
yield this.profiler.start(this.testPath.toString(), executionDetails);
}
catch (e) {
profiler_core_1.LoggerHelper.error('CustomEnvironment.setup():', e);
this.ranSuccessfully = false;
}
}
});
}
teardown() {
return __awaiter(this, void 0, void 0, function* () {
if (constants_1.ENABLE_MEASUREMENTS && this.profiler) {
const performance = new profiler_core_1.PerformanceHelper();
try {
performance.start('jestEnv.env.teardown');
const stopTime = profiler_core_1.TimeHelper.getCurrentHighResolutionTime();
performance.stop('jestEnv.env.teardown');
performance.printReport('jestEnv.env.teardown');
performance.exportAndSum(this.profiler.exportAssetHelper.outputPerformancePath());
yield this.profiler.finish(this.testPath.toString(), stopTime);
}
catch (e) {
profiler_core_1.LoggerHelper.error('CustomEnvironment.teardown(): ', e);
}
}
yield this.environment.teardown();
});
}
}
module.exports = CustomEnvironment;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBR0EsZ0RBQTRDO0FBQzVDLDBEQVMrQjtBQUMvQixvQkFBb0I7QUFDcEIsa0ZBQW1EO0FBQ25ELG9GQUFxRDtBQUVyRCwyQ0FBaUQ7QUFTakQsTUFBTSxpQkFBaUI7SUFRdEIsSUFBSSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQTtJQUMvQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFBO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFBO0lBQ3JDLENBQUM7SUFFRCxZQUFZO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsWUFBWSxNQUE2QixFQUFFLE9BQTJCO1FBQ3JFLFFBQVEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDeEUsS0FBSyxPQUFPO2dCQUNYLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxnQ0FBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ3hELE1BQUs7WUFDTixLQUFLLE1BQU0sQ0FBQztZQUNaO2dCQUNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSwrQkFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDdkQsTUFBSztRQUNQ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