visreg-test
Version:
A visual regression testing solution that offers an easy setup with simple yet powerful customisation options, wrapped up in a convenient CLI runner to make assessing and accepting/rejecting diffs a breeze.
80 lines (79 loc) • 3.89 kB
JavaScript
;
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchSuiteConfig = exports.setSuiteConfigCache = exports.bustSuiteConfigCache = void 0;
const fs = require("fs");
const path = require("path");
const child_process_1 = require("child_process");
const utils_1 = require("../../utils");
const config_1 = require("../config");
let suiteSlug = '';
let snapsFilePath = '';
let fileName = '';
const suiteConfigCache = new Map();
const bustSuiteConfigCache = (incomingSuiteSlug) => __awaiter(void 0, void 0, void 0, function* () {
if (suiteConfigCache.has(incomingSuiteSlug)) {
suiteConfigCache.delete(incomingSuiteSlug);
return true;
}
return false;
});
exports.bustSuiteConfigCache = bustSuiteConfigCache;
const runSuiteConfig = () => __awaiter(void 0, void 0, void 0, function* () {
if (!suiteSlug) {
(0, utils_1.printColorText)('runSuiteConfig: No suite path - see README', '31');
return;
}
process.env.SEND_SUITE_CONF = 'true';
const suiteConfigDir = (0, utils_1.getSuiteDirOrFail)(suiteSlug);
const isTypescript = fs.existsSync(path.join(suiteConfigDir, 'snaps.ts'));
fileName = isTypescript ? 'snaps.ts' : 'snaps.js';
snapsFilePath = path.join(suiteConfigDir, fileName);
return new Promise((resolve, reject) => {
let child;
const pathToCypressContextWrapper = path.join(__dirname, 'run-snaps-in-cypress-context.js');
child = (0, child_process_1.spawn)(`npx tsx ${pathToCypressContextWrapper}`, {
shell: true,
stdio: 'inherit',
env: Object.assign(Object.assign({}, process.env), { FILE_PATH: snapsFilePath })
});
child.on('data', (data) => console.log(`${data}`));
child.on('error', (error) => {
console.error(`exec error: ${error}`);
reject();
});
child.on('close', (code) => {
// At this point the snaps.ts/js file has been run, making a POST request to /receive-suite-config, thereby setting the suiteConfigCache
if (code !== 0) {
(0, utils_1.printColorText)('Error getting suite test configuration', '33');
reject();
return;
}
resolve();
});
});
});
const setSuiteConfigCache = (testConfig) => {
const suiteConfigDir = (0, utils_1.getSuiteDirOrFail)(suiteSlug);
const filesInDir = (0, utils_1.getFilesInDir)(suiteConfigDir).filter(file => file !== '.DS_Store');
const parsedTestConfig = Object.assign(Object.assign({}, testConfig), { suiteSlug, directory: suiteConfigDir, files: filesInDir, fileEndpoint: `http://localhost:${config_1.serverPort}/api/files/${suiteSlug}/` });
suiteConfigCache.set(suiteSlug, parsedTestConfig);
};
exports.setSuiteConfigCache = setSuiteConfigCache;
const fetchSuiteConfig = (incomingSuiteSlug) => __awaiter(void 0, void 0, void 0, function* () {
if (suiteConfigCache.has(incomingSuiteSlug)) {
return suiteConfigCache.get(incomingSuiteSlug);
}
suiteSlug = incomingSuiteSlug;
yield runSuiteConfig();
return suiteConfigCache.get(suiteSlug);
});
exports.fetchSuiteConfig = fetchSuiteConfig;