-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Тема: Code Review: Автоматизированное тестирование сервиса межгалактической аналитики
Общая оценка: 90/100
✔️ Выполненные требования (с указанием начисленных баллов)
-
Покрытие функциональных требований (38/40)
-
Составление тестовых сценариев для всех основных функций — 10/10
ВREADMEи в самом коде чётко описаны сценарии для Generator, Uploader, History и навигации. -
Реализация тестов для основных сценариев работы — 20/20
— Generator: проверка рендера, блокировки кнопки, успешной генерации и запуска скачивания.
— Uploader: проверка начального состояния, активации кнопки, отображения загрузки и прогресса.
— History: отображение списка, кнопок управления, удаление и полная очистка.
— Навигация вApp: переходы между страницами. -
Реализация тестов обработки ошибок — 8/10
— Есть тест на ошибку в Generator.
— Нет явного теста на ошибку при загрузке (Uploader) и нет негативных сценариев для History/API.
Итого: 10 + 20 + 8 = 38/40
-
-
Оптимальность тестовых решений (25/30)
-
Самый простой и быстрый способ проверки — 16/20
— В целом используются моки (vi.mock) и jsdom, но во многих местах происходит рендер всей страницы вместо юнит-тестов отдельных функций. -
Проверяет только заявленную функциональность — 5/5
— Нет лишних ассёртов, каждый тест сфокусирован на одной вещи. -
Отсутствие дублирования проверок — 4/5
— Некоторая дубликация моковuseTabStoreи конфигураций в разныхdescribe.
Итого: 16 + 5 + 4 = 25/30
-
-
Надёжность и стабильность тестов (17/20)
-
Стабильность при многократном запуске — 8/10
— Используетсяcleanupиvi.clearAllMocks, но есть мелкие ошибки в синтаксисе некоторых асинхронных тестов (запятая вместо тела вasync () =>), что может сломать раннер. -
Изоляция тестов — 5/5
— Каждыйdescribeзавершаетcleanup, моки не «протекают». -
Независимость от порядка выполнения — 4/5
— В целом тесты независимы, но двойное мокаутирование одного и того же модуля в beforeEach + глобально может давать неожиданности в другом порядке.
Итого: 8 + 5 + 4 = 17/20
-
-
Читаемость и структура кода (10/10)
-
Названия тестов — 4/4
— Чётко отражают проверяемый сценарий. -
Названия переменных — 3/3
— Используются понятные имена -
Логичная группировка по функциональности — 3/3
— Все тесты организованы вdescribeпо компонентам/страницам.
Итого: 10/10
-
❌ Пропущенные или некорректно реализованные пункты
-
Обработка ошибок в Uploader (–2 балла)
- Нет теста на ситуацию, когда
aggregatedDataReader(или API) выдаёт исключение: нужно проверить, что в UI отображается сообщение об ошибке.
- Нет теста на ситуацию, когда
-
Негативные сценарии для History/API (–2 балла)
- Не протестирована ситуация, когда чтение истории из
localStorage(черезuseHistoryStore) возвращает пустой объект или падает — должен быть отдельный сценарий.
- Не протестирована ситуация, когда чтение истории из
-
Некорректный синтаксис в некоторых тестах Uploader (может сломать раннер)
test("при загрузке файла интерфейс обновляется"), async () => { /* ... */ }
Нужно убрать лишнюю запятую перед
async.
💡 Рекомендации по улучшению
-
Добавить негативные тесты для Uploader и History
— Смоделироватьvi.mockтак, чтобыaggregatedDataReaderвозвращалPromise.reject(), и проверить, что компонент показывает ошибку.
— Для History — тест на пустой список: UI не падает и выводит «Нет истории». -
Упростить некоторые тесты до unit-уровня
— Вместо полного рендераAppсMemoryRouterдля проверки навигации можно протестировать логику в отдельномNavbarчерез рендер только этой компоненты и проверкуsetActiveTab. -
Консолидировать моки
— Вынести общиеvi.mock("../src/store/TabStore.js", ...)и прочие моки в отдельный файлsetupTests.js, подключаемый вvitest.config.jsчерезsetupFiles, чтобы не дублировать их в каждомdescribe. -
Исправить синтаксические опечатки
— Проверь всеasync () =>тесты и убери лишние запятые, чтобы вся тестовая база могла запускаться без ошибок.