|
| 1 | +import { defineConfig } from "cypress"; |
| 2 | +import { compare } from "odiff-bin"; |
| 3 | + |
| 4 | +const path = require("path"); |
| 5 | +const fs = require("fs-extra"); |
| 6 | + |
| 7 | +const downloadDirectory = path.join(__dirname, "e2e/downloads"); |
| 8 | +let isRunningInCommandLine = false; |
| 9 | +export default defineConfig({ |
| 10 | + e2e: { |
| 11 | + viewportWidth: 1200, |
| 12 | + viewportHeight: 800, |
| 13 | + baseUrl: "http://localhost:5175", |
| 14 | + defaultCommandTimeout: 60000, |
| 15 | + fileServerFolder: "e2e", |
| 16 | + supportFile: "e2e/support/e2e.ts", |
| 17 | + fixturesFolder: "e2e/fixtures", |
| 18 | + screenshotsFolder: "e2e/screenshots", |
| 19 | + videosFolder: "e2e/videos", |
| 20 | + specPattern: "e2e/tests/*.cy.ts", |
| 21 | + setupNodeEvents(on, config) { |
| 22 | + // implement node event listeners here |
| 23 | + on("before:browser:launch", (browser, launchOptions) => { |
| 24 | + console.log("launching browser %s is headless? %s", browser.name, browser.isHeadless); |
| 25 | + // supply the absolute path to an unpacked extension's folder |
| 26 | + // NOTE: extensions cannot be loaded in headless Chrome |
| 27 | + if (fs.existsSync("e2e/diff")) { |
| 28 | + fs.rmdirSync("e2e/diff", { recursive: true }); |
| 29 | + } |
| 30 | + if (browser.name === "chrome") { |
| 31 | + launchOptions.preferences.default["download"] = { |
| 32 | + default_directory: downloadDirectory |
| 33 | + }; |
| 34 | + } |
| 35 | + if (browser.isHeadless) { |
| 36 | + isRunningInCommandLine = true; |
| 37 | + } |
| 38 | + launchOptions.args.push("--force-device-scale-factor=1"); |
| 39 | + return launchOptions; |
| 40 | + }), |
| 41 | + on("task", { |
| 42 | + async compare({ fileName, options }) { |
| 43 | + fileName += ".png"; |
| 44 | + const baseFolder = "e2e/fixtures/originImage/"; |
| 45 | + const newFolder = path.join("e2e/screenshots", isRunningInCommandLine ? options.specFolder : ""); |
| 46 | + const diffFolder = path.join("e2e/diff", options.specFolder); |
| 47 | + if (!fs.existsSync(diffFolder)) { |
| 48 | + fs.mkdirSync(diffFolder, { recursive: true }); |
| 49 | + } |
| 50 | + const baseImage = path.join(baseFolder, fileName); |
| 51 | + const newImage = path.join(newFolder, fileName); |
| 52 | + const diffImage = path.join(diffFolder, fileName); |
| 53 | + console.log("comparing base image %s to the new image %s", baseImage, newImage); |
| 54 | + if (options) { |
| 55 | + console.log("odiff options %o", options); |
| 56 | + } |
| 57 | + const started = +new Date(); |
| 58 | + |
| 59 | + const result = await compare(baseImage, newImage, diffImage, options); |
| 60 | + const finished = +new Date(); |
| 61 | + const elapsed = finished - started; |
| 62 | + console.log("odiff took %dms", elapsed); |
| 63 | + |
| 64 | + console.log(result); |
| 65 | + return result; |
| 66 | + } |
| 67 | + }); |
| 68 | + } |
| 69 | + }, |
| 70 | + chromeWebSecurity: false |
| 71 | +}); |
0 commit comments