UNPKG

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
"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()); }); }; 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;