216 lines
5.0 KiB
JavaScript
216 lines
5.0 KiB
JavaScript
/**
|
|
* Visual Regression Testing Configuration
|
|
*
|
|
* This file defines the configuration for visual regression testing across
|
|
* different breakpoints, components, and scenarios.
|
|
*/
|
|
|
|
// Breakpoint definitions for responsive testing
|
|
export const breakpoints = {
|
|
// Mobile breakpoints
|
|
xs: { width: 320, height: 700, name: "Extra Small" },
|
|
sm: { width: 360, height: 700, name: "Small" },
|
|
md: { width: 480, height: 700, name: "Medium" },
|
|
|
|
// Tablet breakpoints
|
|
lg: { width: 640, height: 700, name: "Large" },
|
|
xl: { width: 768, height: 700, name: "Extra Large" },
|
|
|
|
// Desktop breakpoints
|
|
"2xl": { width: 1024, height: 700, name: "2XL" },
|
|
"3xl": { width: 1280, height: 700, name: "3XL" },
|
|
"4xl": { width: 1440, height: 700, name: "4XL" },
|
|
full: { width: 1920, height: 700, name: "Full HD" },
|
|
};
|
|
|
|
// Key breakpoints for focused testing
|
|
export const keyBreakpoints = [
|
|
breakpoints.xs, // Mobile
|
|
breakpoints.md, // Tablet
|
|
breakpoints.xl, // Desktop
|
|
];
|
|
|
|
// Visual testing scenarios
|
|
export const visualScenarios = {
|
|
// Component states
|
|
states: {
|
|
default: "Default state",
|
|
hover: "Hover state",
|
|
focus: "Focus state",
|
|
active: "Active/pressed state",
|
|
disabled: "Disabled state",
|
|
},
|
|
|
|
// Interactive states
|
|
interactions: {
|
|
hover: "Element hovered",
|
|
focus: "Element focused",
|
|
click: "Element clicked",
|
|
loading: "Loading state",
|
|
error: "Error state",
|
|
},
|
|
|
|
// Content variations
|
|
content: {
|
|
short: "Short content",
|
|
long: "Long content",
|
|
empty: "Empty state",
|
|
loading: "Loading content",
|
|
error: "Error content",
|
|
},
|
|
|
|
// Layout scenarios
|
|
layout: {
|
|
compact: "Compact layout",
|
|
spacious: "Spacious layout",
|
|
stacked: "Stacked layout",
|
|
grid: "Grid layout",
|
|
list: "List layout",
|
|
},
|
|
};
|
|
|
|
// Chromatic configuration
|
|
export const chromaticConfig = {
|
|
// Viewports for Chromatic screenshots
|
|
viewports: Object.values(breakpoints).map((bp) => bp.width),
|
|
|
|
// Delay for layout stabilization
|
|
delay: 200,
|
|
|
|
// Modes for different themes
|
|
modes: {
|
|
light: {},
|
|
dark: {
|
|
colorScheme: "dark",
|
|
},
|
|
},
|
|
|
|
// Storybook viewport configuration
|
|
storybookViewports: Object.entries(breakpoints).reduce((acc, [key, bp]) => {
|
|
acc[key] = {
|
|
name: bp.name,
|
|
styles: {
|
|
width: `${bp.width}px`,
|
|
height: `${bp.height}px`,
|
|
},
|
|
};
|
|
return acc;
|
|
}, {}),
|
|
};
|
|
|
|
// Playwright visual testing configuration
|
|
export const playwrightVisualConfig = {
|
|
// Screenshot options
|
|
screenshot: {
|
|
fullPage: false,
|
|
type: "png",
|
|
quality: 90,
|
|
},
|
|
|
|
// Visual comparison options
|
|
visualComparison: {
|
|
threshold: 0.1, // 10% difference threshold
|
|
maxDiffPixels: 100,
|
|
maxDiffPixelRatio: 0.1,
|
|
},
|
|
|
|
// Test timeouts
|
|
timeouts: {
|
|
navigation: 30000,
|
|
action: 5000,
|
|
assertion: 10000,
|
|
},
|
|
};
|
|
|
|
// Component-specific visual testing configurations
|
|
export const componentConfigs = {
|
|
Header: {
|
|
breakpoints: [breakpoints.xs, breakpoints.md, breakpoints.xl],
|
|
states: ["default", "hover", "focus"],
|
|
scenarios: ["navigation", "authentication", "responsive"],
|
|
},
|
|
|
|
Footer: {
|
|
breakpoints: [breakpoints.xs, breakpoints.md, breakpoints.xl],
|
|
states: ["default", "hover", "focus"],
|
|
scenarios: ["navigation", "social", "legal"],
|
|
},
|
|
|
|
Button: {
|
|
breakpoints: [breakpoints.sm, breakpoints.md, breakpoints.lg],
|
|
states: ["default", "hover", "focus", "active", "disabled"],
|
|
variants: ["default", "home"],
|
|
sizes: ["xsmall", "small", "medium", "large", "xlarge"],
|
|
},
|
|
|
|
Logo: {
|
|
breakpoints: [breakpoints.xs, breakpoints.md, breakpoints.xl],
|
|
states: ["default", "hover"],
|
|
variants: ["with-text", "icon-only"],
|
|
},
|
|
|
|
MenuBar: {
|
|
breakpoints: [breakpoints.xs, breakpoints.md, breakpoints.xl],
|
|
states: ["default", "hover", "focus"],
|
|
scenarios: ["navigation", "dropdown"],
|
|
},
|
|
};
|
|
|
|
// Visual regression test patterns
|
|
export const testPatterns = {
|
|
// Basic component testing
|
|
basic: {
|
|
description: "Basic component rendering",
|
|
steps: [
|
|
"Navigate to component",
|
|
"Wait for layout stabilization",
|
|
"Take screenshot",
|
|
],
|
|
},
|
|
|
|
// Interactive state testing
|
|
interactive: {
|
|
description: "Interactive state testing",
|
|
steps: [
|
|
"Navigate to component",
|
|
"Interact with element (hover/focus/click)",
|
|
"Wait for state change",
|
|
"Take screenshot",
|
|
],
|
|
},
|
|
|
|
// Responsive testing
|
|
responsive: {
|
|
description: "Responsive behavior testing",
|
|
steps: [
|
|
"Set viewport size",
|
|
"Navigate to component",
|
|
"Wait for layout stabilization",
|
|
"Take screenshot",
|
|
"Repeat for all breakpoints",
|
|
],
|
|
},
|
|
|
|
// Content variation testing
|
|
contentVariation: {
|
|
description: "Content variation testing",
|
|
steps: [
|
|
"Navigate to component with different content",
|
|
"Wait for layout stabilization",
|
|
"Take screenshot",
|
|
"Compare with baseline",
|
|
],
|
|
},
|
|
};
|
|
|
|
// Export all configurations
|
|
export default {
|
|
breakpoints,
|
|
keyBreakpoints,
|
|
visualScenarios,
|
|
chromaticConfig,
|
|
playwrightVisualConfig,
|
|
componentConfigs,
|
|
testPatterns,
|
|
};
|