first commit

This commit is contained in:
2025-04-04 08:46:42 +02:00
commit 037db50101
9 changed files with 169 additions and 0 deletions

18
e2e/cypress.config.mjs Normal file
View File

@@ -0,0 +1,18 @@
import { defineConfig } from "cypress";
import { initPlugin } from "cypress-plugin-snapshots/plugin";
export default defineConfig({
e2e: {
baseUrl: "http://127.0.0.1:5173/",
screenshotOnRunFailure: true, // Capture screenshots on test failure
setupNodeEvents(on, config) {
initPlugin(on, config);
return config;
},
excludeSpecPattern: [
"**/__snapshots__/*",
"**/__image_snapshots__/*"
]
},
screenshotsFolder: "cypress/screenshots"
});

View File

@@ -0,0 +1,33 @@
describe("full page screenshot", () => {
const takeFullPageScreenshots = () => {
cy.visit("/");
cy.wait(500);
cy.window().toMatchImageSnapshot("first", {
threshold: 0.8
});
cy.wait(400);
cy.window().toMatchImageSnapshot("second", {
threshold: 0.8
});
};
it("Normal screen", () => {
cy.viewport(1280, 720);
takeFullPageScreenshots();
});
it("Old puter screen", () => {
cy.viewport(800, 600);
takeFullPageScreenshots();
});
it("iPhone8", () => {
cy.viewport("iphone-8");
takeFullPageScreenshots();
});
it("iPad2", () => {
cy.viewport("ipad-2");
takeFullPageScreenshots();
});
});

View File

@@ -0,0 +1,51 @@
import "cypress-plugin-snapshots/commands";
declare global {
namespace Cypress {
interface MatchSnapshotOptions {
/** Custom name for the snapshot */
name?: string;
/** Save snapshot as JSON instead of plain text */
json?: boolean;
/** Timeout in milliseconds */
timeout?: number;
}
interface MatchImageSnapshotOptions {
/** Custom name for the image snapshot */
name?: string;
/** Mismatch threshold for considering images different */
threshold?: number;
/** Type of threshold comparison */
thresholdType?: "pixel" | "percent";
/** Direction of the difference detection */
diffDirection?: "horizontal" | "vertical";
/** Allow different image sizes */
allowSizeMismatch?: boolean;
/** Custom configuration for pixelmatch */
customDiffConfig?: Record<string, unknown>;
/** Path to custom snapshots directory */
customSnapshotsDir?: string;
/** Path to custom diffs directory */
customDiffDir?: string;
/** Capture mode */
capture?: "viewport" | "fullPage" | "runner";
}
interface Chainable {
/**
* Take a text-based snapshot and compare with a baseline
* @param name - Name of the snapshot (optional)
* @param options - Snapshot options
*/
toMatchSnapshot(name?: string, options?: MatchSnapshotOptions): Chainable;
/**
* Take an image snapshot and compare with a baseline
* @param name - Name of the snapshot (optional)
* @param options - Image snapshot options
*/
toMatchImageSnapshot(name?: string, options?: MatchImageSnapshotOptions): Chainable;
}
}
}

View File

@@ -0,0 +1 @@
import "./commands";

View File

@@ -0,0 +1,9 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["es5", "dom"],
"sourceMap": true,
"types": ["cypress", "node"]
},
"include": ["**/*.ts"]
}

16
e2e/package.json Normal file
View File

@@ -0,0 +1,16 @@
{
"name": "cypress-e2e",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"cy:open": "cypress open --e2e",
"cy:test": "cypress run --e2e -b firefox"
},
"devDependencies": {
"cypress": "^14.2.1",
"cypress-plugin-snapshots": "^1.4.4",
"typescript": "~5.8.0"
},
"packageManager": "pnpm@10.2.1+sha512.398035c7bd696d0ba0b10a688ed558285329d27ea994804a52bad9167d8e3a72bcb993f9699585d3ca25779ac64949ef422757a6c31102c12ab932e5cbe5cc92"
}