import { defineConfig } from "cypress"; import { compare } from "odiff-bin"; const path = require("path"); const fs = require("fs-extra"); const downloadDirectory = path.join(__dirname, "e2e/downloads"); let isRunningInCommandLine = false; export default defineConfig({ e2e: { viewportWidth: 1200, viewportHeight: 800, baseUrl: "http://localhost:5175", defaultCommandTimeout: 60000, fileServerFolder: "e2e", supportFile: "e2e/support/e2e.ts", fixturesFolder: "e2e/fixtures", screenshotsFolder: "e2e/screenshots", videosFolder: "e2e/videos", specPattern: "e2e/tests/*.cy.ts", setupNodeEvents(on, config) { // implement node event listeners here on("before:browser:launch", (browser, launchOptions) => { console.log("launching browser %s is headless? %s", browser.name, browser.isHeadless); // supply the absolute path to an unpacked extension's folder // NOTE: extensions cannot be loaded in headless Chrome if (fs.existsSync("e2e/diff")) { fs.rmdirSync("e2e/diff", { recursive: true }); } if (browser.name === "chrome") { launchOptions.preferences.default["download"] = { default_directory: downloadDirectory }; } if (browser.isHeadless) { isRunningInCommandLine = true; } launchOptions.args.push("--force-device-scale-factor=1"); return launchOptions; }), on("task", { async compare({ fileName, options }) { fileName += ".png"; const baseFolder = "e2e/fixtures/originImage/"; const newFolder = path.join("e2e/screenshots", isRunningInCommandLine ? options.specFolder : ""); const diffFolder = path.join("e2e/diff", options.specFolder); if (!fs.existsSync(diffFolder)) { fs.mkdirSync(diffFolder, { recursive: true }); } const baseImage = path.join(baseFolder, fileName); const newImage = path.join(newFolder, fileName); const diffImage = path.join(diffFolder, fileName); console.log("comparing base image %s to the new image %s", baseImage, newImage); if (options) { console.log("odiff options %o", options); } const started = +new Date(); const result = await compare(baseImage, newImage, diffImage, options); const finished = +new Date(); const elapsed = finished - started; console.log("odiff took %dms", elapsed); console.log(result); return result; } }); } }, chromeWebSecurity: false });