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.

85 lines (84 loc) 4.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const local_cypress_1 = require("local-cypress"); require("cypress-set-device-pixel-ratio"); require("cypress-network-idle"); const viewportUserAgents = { 'ipad': 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A406 Safari/8536.25', 'iphone': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', 'samsung': 'Mozilla/5.0 (Linux; Android 12; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36', 'macbook': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9', }; const getHeadersWithUserAgent = (viewport, headers) => { if (headers['User-Agent']) { return headers; } if (Array.isArray(viewport)) { return headers; } const viewportUserAgent = Object .keys(viewportUserAgents) .find((key) => viewport.includes(key)); if (!viewportUserAgent) { return headers; } return Object.assign(Object.assign({}, headers), { 'User-Agent': viewportUserAgents[viewportUserAgent] }); }; local_cypress_1.Cypress.Commands.add('prepareForCapture', (props) => { var _a; const { context, onVisit, globalOnVisit } = props; const { fullUrl, viewport, fullPageCapture, visitOptions, requestOptions } = context; if (local_cypress_1.Cypress.browser.name !== 'firefox') { // This is not supported in firefox (will always be 1) local_cypress_1.cy.setDevicePixelRatio(visitOptions.devicePixelRatio || 1); } const visitSettings = { failOnStatusCode: (_a = visitOptions.failOnStatusCode) !== null && _a !== void 0 ? _a : true, headers: getHeadersWithUserAgent(viewport, (requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers) || {}), auth: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.auth, }; local_cypress_1.cy.setResolution(viewport); local_cypress_1.cy.visit(fullUrl, visitSettings); local_cypress_1.cy.get("html, body").invoke(// potentially alleviates some issues with scroll behavior "attr", "style", "height: auto; scroll-behavior: auto;"); // Endpoint hooks take precedence over global hooks (gets it passed as a parameter if user wants to call it) onVisit ? onVisit(local_cypress_1.cy, context, globalOnVisit) : globalOnVisit(local_cypress_1.cy, context); const scrollSettings = { duration: visitOptions.scrollDuration || 750, ensureScrollable: false, }; if (fullPageCapture) { local_cypress_1.cy.scrollTo('bottom', scrollSettings); local_cypress_1.cy.scrollTo('top', scrollSettings); if (visitOptions.waitForNetworkIdle) { local_cypress_1.cy.waitForNetworkIdle(2000, { log: false }); } return; } local_cypress_1.cy.window().then(win => { // We scroll a little even if capture is set to viewport, to trigger any lazy loading/interscetion observer. local_cypress_1.cy.scrollTo(0, win.innerHeight, scrollSettings); local_cypress_1.cy.scrollTo('top', scrollSettings); if (visitOptions.waitForNetworkIdle) { local_cypress_1.cy.waitForNetworkIdle(2000, { log: false }); } }); }); local_cypress_1.Cypress.Commands.add('setResolution', (viewport) => { if (local_cypress_1.Cypress._.isArray(viewport)) { local_cypress_1.cy.viewport(viewport[0], viewport[1]); } else { local_cypress_1.cy.viewport(viewport); } }); local_cypress_1.Cypress.Commands.overwrite('log', (originalFn, ...message) => { if (local_cypress_1.Cypress.config('isInteractive')) { return originalFn(JSON.stringify(message)); } else { return local_cypress_1.cy.task('log', message); } });