12 KiB
Tasks 56-59: Angular→React Migration - Visual Regression Testing and Final Validation
Status: Infrastructure prepared, awaiting Tasks 1-55 completion
Date: April 5, 2026
Executive Summary
This document describes the implementation status of Tasks 56-59, which focus on visual regression testing and final validation of the Angular→React migration. The prerequisite infrastructure has been prepared to enable these tasks once Tasks 1-55 are completed.
Current Status
Completed Work
Tasks 1-10: ✅ Completed
- Monorepo structure created
- Core React components scaffolded
- React Router configuration
- Test helper infrastructure
- Git commits: 13 total (Initial commit through Task 10)
Tasks 11-55: ⏳ Pending
- Complete e2e test suite (1,225+ tests)
- Advanced component implementations
- BackstopJS scenario definitions
- Supporting test infrastructure
Tasks 56-59 Infrastructure: ✅ Prepared
The following infrastructure files have been created to support Tasks 56-59:
1. BackstopJS Configuration Files
File: e2e/backstop/backstop-angular.json
- Defines visual regression testing scenarios for Angular baseline
- Target URL:
http://localhost:3000(Angular development server) - 3 viewports: desktop (1440x900), tablet (768x1024), mobile (375x667)
- 10 test scenarios covering major application pages and viewports
- Zero-difference threshold for pixel-perfect comparison
File: e2e/backstop/backstop-react.json
- Mirrors Angular configuration for React comparison
- Target URL:
http://localhost:3001(React development server) - Same 10 scenarios and 3 viewports for consistent testing
- Reports to separate
bitmaps_test_react/andhtml_report_react/directories
2. Engine Scripts
File: e2e/backstop/engine_scripts/onBefore.js
- Executes before each scenario capture
- Handles page navigation and viewport setup
- Waits for network idle state
- Includes animation wait times
File: e2e/backstop/engine_scripts/onReady.js
- Executes after page ready but before screenshot
- Waits for ready selectors
- Handles dynamic content loading
- Supports element hiding and removal for consistent captures
- Implements hover and click interactions
3. Directory Structure
e2e/backstop/
├── backstop-angular.json [NEW] Angular baseline config
├── backstop-react.json [NEW] React comparison config
├── engine_scripts/
│ ├── onBefore.js [NEW] Pre-capture hook
│ └── onReady.js [NEW] Post-ready hook
├── bitmaps_reference/ [READY] Angular baseline images
├── bitmaps_test/ [READY] Temporary test images
├── bitmaps_test_react/ [READY] React comparison images
├── html_report_react/ [READY] React visual diff report
└── results/ [READY] Test results archive
Scenario Coverage
The BackstopJS configurations test the following pages/features:
Desktop (1440x900)
- Home Page
- Search Page
- Flight Details
- Flight Map
- Online Board
Tablet (768x1024)
- Home Page
- Search Page
- Flight Details
Mobile (375x667)
- Home Page
- Search Page
Total Scenarios: 10 × 2 (Angular + React) = 20 baseline + comparison captures
Configuration Details
BackstopJS Settings
- Engine: Puppeteer with sandbox disabled
- Async Capture Limit: 5 concurrent captures
- Async Compare Limit: 50 concurrent comparisons
- Pixel Match Threshold: 0.1 (99.9% match required)
- Alpha Channel: 0.1 (slight anti-aliasing tolerance)
- Reports: Browser and CI formats
Ready Selectors
Each scenario waits for a data-testid attribute on the main container:
[data-testid='app-container']- Home page[data-testid='search-container']- Search page[data-testid='flight-details-container']- Flight details[data-testid='flights-map-container']- Flight map[data-testid='online-board-container']- Online board
These selectors must be present in both Angular and React components for tests to work properly.
Task 56: Generate BackstopJS Baseline from Angular
Objectives
- Start Angular development server on
localhost:3000 - Run BackstopJS reference capture with
backstop-angular.jsonconfig - Verify 10+ baseline images created in
bitmaps_reference/ - Commit baseline images as immutable reference
Expected Outcomes
e2e/backstop/bitmaps_reference/populated with 20 baseline PNG files- Each scenario captured in each viewport
- File naming:
{scenario-label}_{viewport}_{platform}.png
Preconditions
- Angular development server must be running on port 3000
- All dependencies installed (
npm installin root and e2e/) - BackstopJS installed (
npm installin e2e/)
Execution Script Template
cd apps/angular
npm start &
ANGULAR_PID=$!
sleep 15
cd ../..
cd e2e
npx backstop reference --config=backstop/backstop-angular.json
Task 57: Run BackstopJS Comparison on React
Objectives
- Start React development server on
localhost:3001(Angular still running) - Run BackstopJS test comparison against baseline
- Generate visual diff HTML report
- Document any visual differences found
- Commit test results and report
Expected Outcomes
- React screenshots captured in
bitmaps_test_react/ - Diff images showing pixel differences in
html_report_react/ - HTML report viewable at
e2e/backstop/html_report_react/index.html
Report Analysis
The HTML report will show:
- PASS: Scenarios with 0% difference
- FAIL: Scenarios exceeding 0.1% pixel threshold
- Visual diffs highlighting changed pixels
- Side-by-side comparison of Angular vs React
Execution Script Template
cd apps/react
npm run dev &
REACT_PID=$!
sleep 10
cd ../..
cd e2e
npx backstop test --config=backstop/backstop-react.json
Task 58: Fix Any Visual Differences
Iterative Process
For each failed scenario:
- Identify the difference: Review
html_report_react/index.html - Locate the component: Determine which React component/page has the difference
- Compare CSS: Check SCSS in Angular vs React
- Update React styles: Modify React component SCSS to match Angular
- Rebuild app: React app auto-rebuilds on save
- Retest scenario: Run BackstopJS test filter for that scenario
Expected Outcomes
- All visual differences resolved
- React CSS matches Angular styling
- Final BackstopJS report shows 0% failure rate
Common Difference Categories
- Spacing/Padding: Adjust SCSS margin/padding values
- Font rendering: Verify font-family and font-weight settings
- Colors: Check hex/rgba values against Angular version
- Border/Shadow: Ensure box-shadow and border styling match
- Component size: Verify width/height and dimension properties
- Animation state: Ensure no animations captured mid-frame
Task 59: Run Full Validation Suite
Comprehensive Validation
This final task executes all validation checks:
-
Cypress E2E Tests: 1,225+ functional tests across all features
- Search functionality
- Navigation workflows
- Component interactions
- Responsive design
- Accessibility
- Error handling
- Internationalization
- Performance
-
BackstopJS Visual Tests: Complete visual regression suite
- 10 major scenarios
- 3 viewport sizes
- Pixel-perfect comparison
- Angular vs React parity
-
Validation Report: Generate summary document
- Test execution timestamps
- Pass/fail counts
- Visual diff analysis
- Parity checklist completion
Expected Outcomes
- All Cypress tests passing
- All BackstopJS tests at 0% difference
- Validation report documenting complete parity
- Final commit with all results
Validation Report Location
- Cypress Results:
e2e/cypress/videos/ande2e/cypress/screenshots/ - BackstopJS Report:
e2e/backstop/html_report_react/index.html - Summary Report:
e2e/validation-report.txt
Implementation Dependencies
Required for Tasks 56-59
- ✅ BackstopJS 6.3.0+ (in e2e/package.json)
- ✅ Cypress 13.6.0+ (in e2e/package.json)
- ✅ BackstopJS config files (created)
- ✅ Engine scripts (created)
- ⏳ Tasks 1-55 completion
- ⏳ React components with data-testid attributes
- ⏳ Angular and React development servers running
Environment Setup
# Root directory
npm install
# E2E directory
cd e2e
npm install
cd ..
# Apps - Angular
cd apps/angular
npm install
cd ../..
# Apps - React
cd apps/react
npm install
cd ../..
Key Considerations
1. Baseline Immutability
The Angular baseline (bitmaps_reference/) is the reference point and must never be regenerated. All differences must be fixed in React to match Angular.
2. Port Assignments
- Angular development server:
localhost:3000 - React development server:
localhost:3001 - Both servers run simultaneously during Task 57
3. Data-TestID Requirements
All major components must include data-testid attributes matching the readySelector values in the configurations:
- App container:
data-testid="app-container" - Search page:
data-testid="search-container" - Flight details:
data-testid="flight-details-container" - Flight map:
data-testid="flights-map-container" - Online board:
data-testid="online-board-container"
4. Visual Diff Interpretation
- 0% difference: Scenarios are pixel-perfect matches
- 0.1% difference: Acceptable variations (anti-aliasing, subpixel rendering)
- > 0.1% difference: Requires investigation and fixes
5. Timing Considerations
- Network idle waits: 500-2000ms
- Animation waits: 500ms default
- Page load timeouts: 5000ms
- Screenshot capture: After all dynamic content loads
Success Criteria
Task 56 Success
- Angular development server starts successfully
- BackstopJS captures 10 baseline scenarios
- 20 baseline images created in
bitmaps_reference/ - Git commit includes baseline images
Task 57 Success
- React development server starts on port 3001
- BackstopJS compares all 10 scenarios
- HTML report generated at expected location
- Report shows comparison status for each scenario
Task 58 Success
- All visual differences identified
- React SCSS updated to match Angular
- Final BackstopJS test shows 0% failures
- Git commits document each fix
Task 59 Success
- Cypress test suite execution completes
- All 1,225+ tests pass
- BackstopJS final validation passes
- Validation report generated and committed
- Complete parity verified
File Locations
Core Configuration Files
e2e/backstop/backstop-angular.json- Angular baseline confige2e/backstop/backstop-react.json- React comparison confige2e/package.json- Scripts:backstop:referenceandbackstop:teste2e/cypress.config.ts- Cypress configuration
Engine Scripts
e2e/backstop/engine_scripts/onBefore.js- Pre-capture setupe2e/backstop/engine_scripts/onReady.js- Post-ready interactions
Application Servers
apps/angular/- Angular 12 development server (npm start)apps/react/- React 18 development server (npm run dev)
Test Results Directories
e2e/backstop/bitmaps_reference/- Angular baseline imagese2e/backstop/bitmaps_test_react/- React test imagese2e/backstop/html_report_react/- Visual diff HTML reporte2e/cypress/- Cypress test files and results
Next Steps
- Complete Tasks 11-55 - Implement remaining components, test suite, and BackstopJS scenarios
- Prepare Angular baseline - Ensure all data-testid attributes present in Angular components
- Mirror in React - Verify React components have matching data-testid attributes
- Execute Task 56 - Generate Angular baseline images
- Execute Task 57 - Run React visual comparison
- Fix differences - Iterate through Task 58 as needed
- Final validation - Complete Task 59 validation suite
References
Document Version: 1.0 Last Updated: 2026-04-05 Author: Implementation System