Проект создан на базе create react app.
Проект создан на React с использованием классического окружения - react-redux и react-router-dom. Также для упрощения работы с redux используется redux-thunk.
Проект структурирован для лучшего масштабирования. В целом названия папок отражают их сущности. Отдельно стоит остановиться на pages, UI, wigets.
pages
- содержит крупные компоненты (страницы), имеет сильную связку с проектом (использует redux для связки данных),
при этом все равно присутствует модульность (экшены, редьюсеры, константы хранятся изолированно в папке страницы).
UI
- содержит самые мелкие части приложения, которые используются повсеместно. Каждый UI компонент
независим от инфраструктуры приложения, может быть безболезненно перенесен в другой проект.
wigets
- по смыслу похож на UT, однако, содержит большие составные модули.
Принимает на вход массив элементов с информацией о товаре. Внутри себя содержит элементы управления и вывода информации, а на вход возвращает id выбранного пользователем товара.
Для UNIT тестирования функций используется jest. Мною показан пример тестирования reducer и action. В первом случае мы пробрасываем action и проверяем итоговый результат. В случае с action все несколько сложнее, мы вынуждены использовать моки для асинхронной функции получения данных, также мы проверяем, что action задиспачил нужные нам данные.
Для тестирования компонентов используется @testing-library/react. В этом случае мы рендерим компоненты с заготовленными props и делаем снимок итогового результата. Методы проверяем с помощью мока функций.