Этот каталог содержит unit и интеграционные тесты для игровой механики Farkle.
gameLogic.js- Извлеченные функции игровой логики (чистые функции без DOM зависимостей)gameLogic.test.js- Unit тесты для игровой логикиgameIntegration.test.js- Интеграционные тесты для игрового процесса
Перед запуском тестов необходимо установить зависимости:
npm installЭто установит Jest - фреймворк для тестирования JavaScript.
npm testили
npx jestТесты будут автоматически перезапускаться при изменении файлов:
npm run test:watchПоказывает, какой процент кода покрыт тестами:
npm run test:coverageПосле выполнения откройте test/coverage/index.html в браузере для просмотра детального отчета.
npx jest gameLogic.test.jsили
npx jest gameIntegration.test.jsnpx jest -t "should score triple ones as 1000"- randomInt - Генерация случайных чисел в диапазоне
- rollDice - Бросок костей
- countsFromDice - Подсчет количества каждой грани
- isRun - Определение последовательности (1-6)
- isThreePairs - Определение трех пар
- scoreSelection - Подсчет очков за выбранные кости
- Специальные комбинации (run, three pairs)
- N-of-a-kind (тройки, четверки, пятерки, шестерки)
- Одиночные кости (1 = 100, 5 = 50)
- Комбинации
- Невалидные выборы
- bestScoringSubset - Поиск лучшей комбинации среди выпавших костей
- Farkle detection - Определение фаркла (нет комбинаций)
- Hot dice detection - Определение горячих костей (все кости засчитываются)
- Turn flow simulation - Симуляция полного хода игрока
- Scoring edge cases - Граничные случаи подсчета очков
- Game state transitions - Переходы между состояниями игры
- Win condition - Условия победы
Чтобы добавить новый тест:
- Откройте соответствующий тестовый файл (
gameLogic.test.jsилиgameIntegration.test.js) - Добавьте новый
test()илиdescribe()блок - Запустите тесты для проверки
Пример:
test('should handle new scenario', () => {
const result = scoreSelection([1, 2, 3]);
expect(result.valid).toBe(true);
expect(result.score).toBe(100);
});Если тест не проходит:
-
Запустите тесты с флагом
--verboseдля детального вывода:npx jest --verbose
-
Используйте
console.log()внутри теста для отладки:test('debug test', () => { const result = scoreSelection([1, 1, 1]); console.log('Result:', result); expect(result.score).toBe(1000); });
-
Запустите только один тест для изоляции проблемы:
npx jest -t "test name"
Цель - достичь высокого покрытия кода тестами. Текущее покрытие можно проверить командой:
npm run test:coverageОтчет будет сохранен в test/coverage/index.html.
- Тесты используют Jest - популярный фреймворк для тестирования JavaScript
- Все функции игровой логики извлечены в
gameLogic.jsдля возможности тестирования - Тесты не требуют браузера и выполняются в Node.js окружении
- Для тестирования UI компонентов потребуется дополнительная настройка (например, jsdom)