React Testing Techniques
This project implements an online shopping application to show techniques used to test React applications. We use the following tools for testing:
Unit Testing
-
Jest - a testing framework designed to ensure correctness of any JavaScript or TypeScript codebase
-
React Testing Library - a testing framework for React components that encourages better testing practices
-
Mock Service Worker - a framework to mock APIs by intercepting requests at the network level. It allows us to reuse the same mock definition for testing, development, and debugging.
Integration Testing
- Cypress - a testing framework for fully built Web applications running in a browser
Manual Testing
- Storybook - a tool that helps build components in isolation and record their states as stories. Stories make it easy to explore a component in all its permutations no matter how complex. They also serve as excellent visual test cases. Storybook testing can also be automated. For details, look at the Storybook documentation.
This project was bootstrapped with React Accelerate.
Testing Topics
- Structuring code for easier testing - pure JavaScript logic vs. React components
- Snapshot testing vs. traditional unit testing
- Suppressing console errors
- Checking for existence of an element
- Waiting for removal of an element
- Waiting for something to happen
- User events (note how {selectall} works)
- Mocking a callback (see ProductView test)
- Use MSW instead of excessive mocking
- Overriding MSW handlers (see CartView test)
- Mocking MSW handlers (see CatalogView test)
- Difference between queryBy, getBy and findBy
- Testing for page navigation
Getting Started
Note: If you prefer to use npm, please feel free to replace the yarn commands in this section with equivalent npm commands.
Make sure your development machine is set up for building React apps. See the recommended setup procedure here.
Execute the following commands to install dependencies:
yarn install
Execute the following commands to run the app:
yarn start
Now point your browser to http://localhost:3000/.
Running Unit Tests
Execute one of the following command to run unit tests.
yarn test # interactive mode
# OR
yarn test:coverage # non-interactive mode with coverage information
Running End-to-End Tests
yarn start # starts a local server hosting your react app
# in a difference shell, run cypress
yarn cypress:open
Running Storybook
yarn storybook
Screenshots
Home page with item catalog and shopping cart