- Восстановлен мягкий цвет пузырей: color-mix(92%) вместо жесткого var(--bs-primary) - Аватары: border-radius 9999px + grid layout для идеальных кругов - Разделители: правильный spacing, font-weight 700, pointer-events, color-mix прозрачность - Добавлены оптимизации скролла: rootMargin 300px, limit 50 сообщений (Telegram-стиль) - Добавлены новые модули: messageLoader, scrollManager, chatUtils - Рефакторинг логики загрузки сообщений для предотвращения дубликатов - Создана документация по архитектуре и тестированию
11 KiB
11 KiB
Руководство по тестированию системы чата
📋 Обзор
Комплексная система тестирования для всех компонентов чата EUSRR. Тесты написаны на чистом JavaScript и могут быть запущены прямо в консоли браузера без дополнительных инструментов.
🚀 Способы запуска тестов
Способ 1: Через HTML интерфейс (Рекомендуется)
-
Откройте файл в браузере:
http://localhost:8000/static/js/tests/runTests.html -
Нажмите на кнопку для запуска нужного набора тестов:
- 🚀 Запустить все тесты - полный набор всех тестов
- 📦 MessageStore - тесты хранилища сообщений
- 📥 MessageLoader - тесты загрузчика сообщений
- 📜 ScrollManager - тесты менеджера скролла
- 🎨 MessageRenderer - тесты рендерера сообщений
- 🎮 ChatController - тесты контроллера чата
- 🔗 Интеграционные - тесты взаимодействия компонентов
- ⚡ Производительность - тесты производительности
-
Результаты отображаются:
- В интерфейсе страницы
- В консоли браузера (F12)
Способ 2: Из консоли браузера на странице чата
-
Откройте страницу чата в браузере
-
Откройте консоль разработчика (F12)
-
Загрузите тестовый модуль:
const script = document.createElement('script'); script.src = '/static/js/tests/chatTests.js'; script.type = 'module'; document.head.appendChild(script); -
Запустите тесты:
// Все тесты await window.ChatTests.runAll() // Отдельные модули await window.ChatTests.testMessageStore() await window.ChatTests.testMessageLoader() await window.ChatTests.testScrollManager() await window.ChatTests.testMessageRenderer() await window.ChatTests.testChatController() await window.ChatTests.testIntegration() await window.ChatTests.testPerformance()
Способ 3: Скопировать код в консоль
- Откройте файл
/static/js/tests/chatTests.js - Скопируйте весь код
- Вставьте в консоль браузера на странице чата
- Запустите:
await window.ChatTests.runAll()
📊 Что тестируется?
MessageStore (Хранилище сообщений)
- ✅ Добавление одного сообщения
- ✅ Обработка дубликатов
- ✅ Массовое добавление сообщений
- ✅ Получение сообщения по ID
- ✅ Проверка наличия сообщения
- ✅ Получение старейшего/новейшего сообщения
- ✅ Обновление сообщения
- ✅ Удаление сообщения
- ✅ Очистка чата
- ✅ Оптимистичные сообщения
- ✅ События Store (messagesAdded, messageUpdated, etc.)
MessageLoader (Загрузчик сообщений)
- ✅ Инициализация
- ✅ Состояния загрузки
- ✅ Состояния чата (hasMore, oldestId)
- ✅ Обработка WebSocket событий (новое сообщение, редактирование, удаление)
- ✅ Обработка реакций
- ✅ Оптимистичная отправка
ScrollManager (Менеджер скролла)
- ✅ Инициализация
- ✅ Скролл вниз
- ✅ Скролл к сообщению
- ✅ Сохранение/восстановление позиции
- ✅ IntersectionObserver для lazy loading истории
MessageRenderer (Рендерер сообщений)
- ✅ Инициализация
- ✅ Рендеринг сообщения
- ✅ Обновление сообщения
- ✅ Рендеринг собственного сообщения
- ✅ Удаление сообщения
- ✅ Очистка контейнера
ChatController (Контроллер чата)
- ✅ Инициализация всех компонентов
- ✅ Наличие всех методов (init, loadChat, sendMessage, etc.)
- ✅ Event listeners
- ✅ Оптимистичная отправка
Интеграционные тесты
- ✅ Полный цикл жизни сообщения (добавление → редактирование → удаление)
- ✅ Множественные сообщения
- ✅ Оптимистичная отправка с подтверждением
- ✅ События Store → Renderer
Тесты производительности
- ✅ Массовое добавление (1000 сообщений)
- ✅ Поиск сообщений (100 запросов)
- ✅ Рендеринг большого количества сообщений
- ✅ Массовое обновление
📈 Интерпретация результатов
Успешный запуск
🏁 ИТОГОВЫЕ РЕЗУЛЬТАТЫ
============================================================
Всего тестов: 87
✅ Успешно: 87
❌ Провалено: 0
📈 Процент успеха: 100.0%
============================================================
С ошибками
🏁 ИТОГОВЫЕ РЕЗУЛЬТАТЫ
============================================================
Всего тестов: 87
✅ Успешно: 82
❌ Провалено: 5
📈 Процент успеха: 94.3%
============================================================
❌ Проваленные тесты:
- Добавление дубликата должно вернуть 0 (expected: 0, got: 1)
- Должно быть отрендерено 10 сообщений (expected: 10, got: 9)
...
🔧 Добавление новых тестов
Структура теста:
async testYourFeature() {
console.log('\n🧪 Тестирование YourFeature...\n');
this.resetResults();
// Подготовка
const component = new YourComponent();
// Тест 1
const result = component.doSomething();
this.assertEqual(result, expectedValue, 'Описание теста');
// Тест 2
this.assert(condition, 'Условие должно быть истинным');
// Тест 3
this.assertNotNull(value, 'Значение не должно быть null');
this.printResults();
return this.results;
}
Добавьте в runAll():
const yourResults = await this.testYourFeature();
Экспортируйте:
window.ChatTests = {
// ...
testYourFeature: () => chatTests.testYourFeature()
};
🐛 Отладка проваленных тестов
- Проверьте консоль браузера - там будет детальная информация об ошибках
- Запустите конкретный тест -
window.ChatTests.testMessageStore()вместоrunAll() - Добавьте console.log в проваленный тест для отладки
- Проверьте DOM - возможно, элементы не создаются корректно
- Проверьте timing - добавьте
await this.sleep(100)если нужно время на рендеринг
📝 Примеры использования
Быстрая проверка после изменений
// После изменения MessageStore
await window.ChatTests.testMessageStore()
// После изменения рендеринга
await window.ChatTests.testMessageRenderer()
Проверка производительности
// Запускайте периодически для мониторинга
await window.ChatTests.testPerformance()
Полная проверка перед коммитом
// Все тесты должны пройти успешно
const results = await window.ChatTests.runAll()
console.log(`Готов к коммиту: ${results.failed === 0}`)
🎯 Best Practices
- Запускайте тесты регулярно - после каждого значимого изменения
- Проверяйте производительность - следите за регрессией скорости
- Добавляйте тесты для новых фич - покрывайте новый код тестами
- Не коммитьте без тестов - все тесты должны проходить
- Используйте HTML интерфейс - удобнее для повседневной работы
🔍 Troubleshooting
Тесты не загружаются
- Убедитесь, что Django сервер запущен
- Проверьте путь к файлу:
/static/js/tests/chatTests.js - Откройте консоль и проверьте ошибки загрузки модулей
Тесты падают с ошибками модулей
- Убедитесь, что вы на странице чата (модули должны быть доступны)
- Проверьте, что все зависимости импортированы корректно
- Очистите кэш браузера (Ctrl+Shift+R)
Производительность тестов низкая
- Проверьте производительность в режиме инкогнито (без расширений)
- Используйте последнюю версию браузера
- Закройте другие вкладки браузера
📞 Поддержка
При возникновении проблем:
- Проверьте консоль браузера на ошибки
- Запустите тесты по отдельности для локализации проблемы
- Проверьте, что все модули чата загружены корректно
- Убедитесь, что используете актуальную версию кода
Последнее обновление: 12 января 2026