Manual testing is essential for ensuring React components function correctly in real-world scenarios. It helps identify issues that automated testing often misses, such as accessibility barriers, visual inconsistencies, and device-specific problems. This checklist focuses on practical steps to test rendering, interactions, state updates, accessibility, usability, and cross-device performance.
Key Points:
- Rendering & State: Verify default states, conditional rendering, and behavior with unusual or invalid data.
 - User Interactions: Test clicks, typing, keyboard navigation, and edge cases like invalid inputs.
 - Accessibility: Use keyboard navigation, screen readers, and tools to check ARIA roles, focus management, and color contrast.
 - Device Testing: Test resizing, touch gestures, and browser compatibility across major browsers and devices.
 - Visual Design: Check all component states (default, hover, active, disabled, etc.), ensure adherence to design systems, and test with dynamic content.
 
Why manual testing matters:
- Over 60% of accessibility issues are caught manually.
 - Device-specific quirks and visual bugs often surface only during manual reviews.
 - Accessibility compliance (WCAG 2.1, ADA) is critical for user inclusivity.
 
This guide provides steps and tools to ensure React components perform reliably across various scenarios, improving user experience and reducing production bugs.
Component Testing IRL (with testing-library and jest)

Testing React Component Functions

When testing React components, you’re essentially ensuring the component works as expected. This includes checking how it renders, how it behaves during user interactions, and how it handles data updates. Let’s break it down into three key areas: rendering, interaction, and state validation.
Check Component Rendering and Default States
Start by rendering the component with its default properties. Look for expected UI elements like text, images, and default values. For example, a counter component should display "0" when first rendered. Use browser developer tools to inspect the DOM structure and identify any missing or incorrectly rendered elements.
Conditional rendering is another important aspect. Test how the component behaves under both true and false conditions to ensure it adapts properly.
Test User Interactions
Simulate user actions like clicks, typing, form submissions, or keyboard navigation to see how the component responds. For instance, clicking an "Increment" button should increase a counter value. Make sure to test both successful interactions and error cases, such as invalid inputs or disabled buttons. This helps verify that the component handles edge cases gracefully.
Verify Property and State Updates
To test how the component reacts to changes, manually update its props or state, or trigger updates through interactions. Check if the UI and behavior adjust as expected. For edge cases, try passing unusual values like null, undefined, or unexpected data types. The component should either handle these gracefully with fallbacks or display appropriate warnings.
If the component includes complex conditional logic, organize your tests to cover each possible branch. This can also help highlight areas where the code might benefit from simplification. For components using hooks, pay attention to how state updates, side effects, and responses to external data are handled.
Testing Accessibility and Usability
After validating functionality and state, the next step is ensuring React components meet accessibility and usability standards. Accessibility testing ensures your components are inclusive, addressing the needs of all users, including the 1 in 4 U.S. adults with disabilities. A 2023 WebAIM Million report found that 96.8% of home pages failed to meet WCAG standards, highlighting the importance of thorough manual testing. These tests go beyond automated tools to identify subtle barriers that might exclude users. Compliance with WCAG 2.1 Level AA, ADA, and Section 508 is non-negotiable for accessible design.
Test Keyboard Navigation and Focus
Keyboard navigation is a critical part of accessibility. Use keys like Tab, Shift+Tab, Enter, and Space to navigate through your component. Every interactive element – such as buttons, links, form fields, and custom controls – should be accessible in a logical sequence. Focus indicators, like outlines or highlights, must be visible to show users their current position within the interface. For modal dialogs, ensure focus is trapped inside the dialog until it’s closed, preventing users from unintentionally navigating to background content.
Custom components, such as toggle switches and dropdown menus, often need extra attention. These elements may require advanced keyboard support, like arrow keys for navigating dropdown options or Enter and Space for making selections. These details ensure a seamless experience for keyboard users.
Test Screen Reader Support
Screen readers like NVDA (Windows), VoiceOver (macOS), and JAWS offer insight into how visually impaired users experience your component. Ensure these tools announce information clearly and in the correct order. ARIA roles and descriptive labels are essential for interactive elements. For example, a custom toggle switch should announce both its function and state, such as "Notifications enabled", rather than using vague labels.
Dynamic content also needs to be screen-reader-friendly. For example, when a user submits a form, the success or error message should be announced immediately. ARIA live regions can help communicate these updates in real time, ensuring users don’t have to search for important status messages.
Check Color Contrast and Alternative Text
Color contrast is another vital consideration. Tools like the Chrome DevTools Accessibility panel or axe DevTools can help measure contrast ratios. WCAG AA requires a minimum contrast ratio of 4.5:1 for standard text and 3:1 for larger text. Additionally, all images and icons should include meaningful alternative text. For example, a profile picture might use alt text like "User profile picture", while purely decorative images should use an empty alt attribute (alt="") so screen readers skip them. Icon buttons should include an aria-label or visually hidden text describing their function.
Don’t forget to test your component at various zoom levels – up to 200%. Text should remain legible, and interactive elements should stay functional without horizontal scrolling or overlapping content. This ensures a responsive experience across devices and screen sizes.
For teams working with design-to-code workflows, tools like UXPin allow for early accessibility testing during the prototyping stage. By using real React components, teams can identify and resolve issues early, reducing the need for expensive fixes after launch.
Testing Across Devices and Screen Sizes
Today’s web users interact with applications through a wide range of devices, making it essential to ensure React components perform well across different screen sizes. According to StatCounter (October 2025), mobile devices account for over 55% of global web traffic. Additionally, the 2023 Stack Overflow Developer Survey revealed that more than 70% of front-end bugs reported in production are tied to layout or device compatibility issues. These figures highlight the importance of thoroughly testing components on various devices and screen sizes.
Test Window Resizing
Start by resizing your browser window from desktop to mobile dimensions. Watch how the layout, content, and interactions adapt. Keep an eye out for common issues like overlapping elements, content getting cut off, horizontal scrolling, or improperly scaled images and text.
Browser developer tools can simulate specific screen widths, such as 320px (mobile), 768px (tablet), and 1024px (desktop). These breakpoints are critical for checking that CSS media queries and design system rules are functioning as intended. For example, verify that navigation bars collapse into hamburger menus on smaller screens and that modal dialogs remain centered and accessible.
Consider this scenario: a card grid may look flawless on a desktop display but cause text overflow on a mobile screen. Similarly, a sidebar might push the main content off-screen when viewed on a tablet. These subtle but impactful issues often only surface during manual testing on actual devices, as emulators and resizing tools can miss device-specific quirks.
Once resizing tests are complete, shift your focus to physical device interactions.
Test Mobile Touch Interactions
Testing on real devices is vital, as touch behavior can vary significantly across browsers and operating systems. Events like onClick and onTouchStart don’t always behave consistently. Use smartphones and tablets to evaluate common touch gestures, including tapping, swiping, pinching, and long-pressing.
Make sure buttons, links, and other interactive elements respond quickly and are easy to use. Accessibility guidelines recommend touch targets be at least 48×48 pixels. For instance, test a carousel component by swiping horizontally or ensure dropdown menus open and close properly when tapped. Confirm that scrolling or swiping doesn’t trigger unexpected behaviors or interfere with other functionality.
Here’s an example: an image carousel that works flawlessly with mouse clicks might fail to respond to swipe gestures on an iOS device. Similarly, a button that seems adequately sized on a desktop could be too small for comfortable tapping on an Android phone. These types of real-world testing scenarios often reveal issues that desktop-only tests overlook.
Test Different Browsers
After device testing, ensure your React components maintain consistent visuals and functionality across browsers. Cross-browser compatibility is still a key factor for a smooth user experience. Test your components in major browsers commonly used in the United States, including Chrome, Firefox, Safari, Edge, and mobile browsers like Chrome for Android and Safari for iOS. Different browsers can interpret CSS and JavaScript APIs in unique ways, leading to inconsistencies.
Focus on checking visual design, functionality, and performance. For example, CSS features like flexbox or grid layouts may behave differently across browsers. A dropdown menu might fail to open in Safari due to a z-index issue but work perfectly in Chrome. Similarly, a flexbox layout could break in older browser versions, causing columns to stack incorrectly.
Use browser-specific developer tools to debug and compare rendering. Document any browser-specific bugs with screenshots and detailed steps to reproduce the issue, including browser version and operating system details. This documentation helps developers prioritize fixes and ensures thorough validation after updates.
If you’re looking for a tool to streamline testing across devices and screen sizes, UXPin offers interactive prototyping capabilities. Brian Demchak, Sr. UX Designer at AAA Digital & Creative Services, shared:
"As a full stack design team, UXPin Merge is our primary tool when designing user experiences. We have fully integrated our custom-built React Design System and can design with our coded components. It has increased our productivity, quality, and consistency, streamlining our testing of layouts and the developer handoff process".
sbb-itb-f6354c6
Testing Visual Design and State Changes
Once you’ve confirmed that components function correctly and adapt as needed, it’s time to ensure their visuals match the intended designs across all states. Consistent visuals are key to building user trust. A 2023 State of Frontend survey found that over 60% of frontend teams rely on a design system, with 45% identifying visual inconsistencies as a major source of UI bugs. In fact, visual bugs account for up to 30% of reported UI issues in production React applications, highlighting the importance of thorough visual state testing.
Test All Visual States
Every React component should be tested manually across its various states: default, hover, active, disabled, loading, and error. Each of these states reflects a unique user interaction or system condition, and testing them ensures the component looks and behaves as intended in every scenario.
Start with the default state to establish a baseline. Use browser developer tools to simulate different states by applying pseudo-classes like :hover and :active. For example, when testing a button component, confirm that:
- The hover state correctly changes the background color.
 - The active state displays the pressed appearance.
 - The disabled state appears grayed out and prevents cursor interaction.
 
Pay extra attention to loading and error states, as they are often overlooked but critical for user experience. Make sure loading states display spinners or indicators, and error states provide clear, actionable messages. Missing or inconsistent states can lead to confusion or accessibility issues.
Common pitfalls include skipping less common states, failing to test combinations (like disabled and hover), and ignoring variations such as dark mode or theming. To avoid these issues, use a checklist to ensure every state is tested thoroughly.
After testing individual states, confirm they align with your design system’s standards.
Check Design System Standards
Components should follow your organization’s design system guidelines, using proper design tokens for colors, spacing, and typography to maintain a cohesive look. Design tokens are standardized variables for design attributes, ensuring uniformity across components.
During testing, use developer tools to confirm that design tokens are applied instead of hardcoded styles. For instance, check that a button’s background color uses the primary color token from the design system, rather than a custom hex code. Ensure spacing adheres to the set scale (e.g., 8px, 16px, 24px), and typography uses the correct fonts and weights.
Deviations from the design system can lead to inconsistent visuals, higher maintenance costs, and a fractured user experience. Reference design system documentation during testing, and involve designers in reviews to catch subtle inconsistencies that developers might miss.
Tools designed for code-backed components can simplify this process. Brian Demchak, Sr. UX Designer at AAA Digital & Creative Services, shared how his team ensures design system compliance:
"As a full stack design team, UXPin Merge is our primary tool when designing user experiences. We have fully integrated our custom-built React Design System and can design with our coded components. It has increased our productivity, quality, and consistency, streamlining our testing of layouts and the developer handoff process".
Test with Dynamic Content
Real-world applications rarely display static content, so it’s essential to test components with mock data and edge cases to ensure they remain visually stable and functional under all conditions. Use varied content types, such as long text, special characters, images of different sizes, and unusual formats.
Watch for issues like text overflow, broken layouts, or misaligned elements when content stretches beyond expected boundaries. For example, a card component might look fine with a short title and description but break when a user enters a long title or uploads an image with an unusual aspect ratio. Also, test how components handle empty states, extremely long strings, and content with special characters or emojis.
Document any problems with clear reproduction steps, including browser and device details, to help developers address them efficiently.
To supplement manual testing, consider using visual regression testing tools. These tools can automate the detection of visual changes in React components, flagging potential issues. However, manual reviews remain crucial for catching subtle visual problems, particularly in dynamic content scenarios where human judgment is needed to assess proper layout behavior.
Manual Testing Tools and Methods
Using a combination of browser-based tools and specialized platforms can make manual testing more efficient. Systematic testing of your components is crucial, especially since over 60% of accessibility issues in web applications come from missing ARIA attributes and poor color contrast – issues that the right tools can catch early. These methods align well with the testing practices mentioned earlier.
Use Developer Tools and Accessibility Extensions
Tools like Chrome DevTools and Firefox Developer Tools are indispensable for inspecting React components during manual testing. They allow you to examine the DOM, simulate various devices, and adjust component states in real time. With the device toolbar, you can emulate different screen sizes and test touch interactions.
Accessibility extensions such as axe DevTools, Lighthouse, and WAVE go a step further by scanning components for violations and suggesting actionable fixes. For instance, axe DevTools can highlight missing alt text on images, insufficient color contrast, and improper focus management – issues that are often overlooked during visual testing.
To test various component states, you can use the Elements panel in Chrome DevTools to toggle pseudo-classes like :hover and :active. Meanwhile, the Console panel lets you directly modify component properties, which is especially helpful when testing edge cases with atypical data.
Additionally, thorough documentation can reduce regression bugs by up to 30% in agile development teams. Consistent use of tools and detailed documentation are essential for maintaining product quality.
Test Components in Isolation
Taking general testing a step further, isolating components helps refine quality assurance by focusing on individual pieces. Testing components independently can uncover issues that might be masked by surrounding elements or the complexity of the overall application state. Tools like Storybook are particularly useful, as they let you create interactive stories for each component state and spot visual regressions.
UXPin offers another option with its prototyping workspace, which allows you to test code-backed React components in a live environment. This setup lets you evaluate real component behavior, accessibility features, and responsiveness before integrating them into the application.
Mark Figueiredo, Sr. UX Team Lead at T. Rowe Price, shared how this approach improved efficiency:
"What used to take days to gather feedback now takes hours. Add in the time we’ve saved from not emailing back-and-forth and manually redlining, and we’ve probably shaved months off timelines".
When testing in isolation, focus on component-driven development practices. Experiment with different property combinations, create scenarios for each visual state, and ensure components remain functional as content changes. This allows you to identify layout issues, state management problems, and accessibility gaps more effectively.
Document Issues and Track Bugs
Good documentation is the backbone of reliable manual testing. It transforms testing into a structured quality assurance process. Tools like Jira, GitHub Issues, and Trello are excellent for recording detailed bug reports, including reproduction steps, screenshots, and environment details.
When documenting bugs, include the component name, clear steps to reproduce, relevant screenshots, and environment details. Use tags like "accessibility", "responsiveness", or "visual regression" to categorize and prioritize fixes.
It’s also a good idea to create a shared test case repository. This should document edge cases such as unusual input values, rapid user interactions, or unexpected state transitions. Such a resource ensures that previously identified issues don’t resurface in future updates.
With accessibility-first testing gaining momentum, thorough documentation is becoming even more critical. Legal requirements and growing user demand for accessible applications make it important to keep clear records of testing efforts to demonstrate compliance.
Lastly, prepare mock data and edge case scenarios to ensure comprehensive coverage during manual testing. Document not only the bugs but also the scenarios that work as intended. This provides a solid foundation for future testing efforts and helps streamline the process over time.
Conclusion
Thorough manual testing for functionality, accessibility, and responsiveness, paired with structured testing processes and the right tools, can drastically reduce UI problems. Teams that adopt detailed component testing strategies often see a 30-50% drop in production bugs and UI-related support tickets. This success stems from identifying issues early in development – long before users encounter them.
Tools like UXPin streamline this process by enabling designers and developers to prototype with actual React components. As mentioned earlier, this approach helps teams catch and address potential issues during the design phase, cutting down on expensive fixes after launch.
Interestingly, over 70% of accessibility issues are identified through manual testing, not automation. Testing with keyboards, screen readers, and assistive technologies ensures your application is inclusive for all users – not just those relying on standard mouse interactions.
When combined with tools like UXPin, disciplined testing practices lead to robust React applications. Detailed documentation, structured checklists, and testing components in isolation create a strong quality assurance framework. By following these methods, you can build React applications that perform seamlessly across devices and interaction methods, meeting the needs of all users.
FAQs
Why is manual testing necessary for React components when automated tools are widely used?
Manual testing plays a crucial role in evaluating React components because it uncovers issues that automated tools might miss. These can include subtle challenges in user experience, accessibility shortcomings, and inconsistencies in responsiveness across various devices.
By conducting manual tests, you get a firsthand look at how real users interact with the components. This insight helps ensure a smoother, more intuitive experience. While automated tools are incredibly helpful, they can’t entirely replace the human touch needed to spot these finer details.
What accessibility issues can only be found through manual testing?
Manual testing plays a key role in catching accessibility issues that automated tools often overlook. Some common challenges include:
- Incomplete or inconsistent keyboard navigation that makes it hard for users to move through content.
 - Screen reader compatibility problems, like missing or inaccurate announcements.
 - Misused or unclear ARIA labels, or instances where they’re completely absent.
 - Poor color contrast that doesn’t meet accessibility guidelines, making content difficult to read.
 - Unresponsive or unclear focus states, which can confuse users navigating with a keyboard.
 
Fixing these problems helps make your React components more inclusive and easier to use for all individuals.
How can I make sure my React components look consistent on all devices and browsers?
To keep your React components looking consistent across different devices and browsers, rely on tools that integrate code-backed components. This approach ensures the components you design align perfectly with what developers implement, minimizing any mismatches.
It’s also important to manually test your components on various screen sizes and browsers. This hands-on approach helps you spot and address any layout or functionality issues early on.
Using platforms that simplify the design-to-code workflow can further enhance the process. These tools help bridge the gap between design and development, making it easier to turn designs into working components while saving time and reducing errors.