Skip to content

Latest commit

 

History

History
153 lines (107 loc) · 5.21 KB

File metadata and controls

153 lines (107 loc) · 5.21 KB

Тесты для игры Farkle

Этот каталог содержит unit и интеграционные тесты для игровой механики Farkle.

Структура тестов

  • gameLogic.js - Извлеченные функции игровой логики (чистые функции без DOM зависимостей)
  • gameLogic.test.js - Unit тесты для игровой логики
  • gameIntegration.test.js - Интеграционные тесты для игрового процесса

Установка зависимостей

Перед запуском тестов необходимо установить зависимости:

npm install

Это установит Jest - фреймворк для тестирования JavaScript.

Запуск тестов

Запуск всех тестов

npm test

или

npx jest

Запуск тестов в режиме наблюдения (watch mode)

Тесты будут автоматически перезапускаться при изменении файлов:

npm run test:watch

Запуск тестов с покрытием кода

Показывает, какой процент кода покрыт тестами:

npm run test:coverage

После выполнения откройте test/coverage/index.html в браузере для просмотра детального отчета.

Запуск конкретного тестового файла

npx jest gameLogic.test.js

или

npx jest gameIntegration.test.js

Запуск конкретного теста

npx jest -t "should score triple ones as 1000"

Что тестируется

Unit тесты (gameLogic.test.js)

  • randomInt - Генерация случайных чисел в диапазоне
  • rollDice - Бросок костей
  • countsFromDice - Подсчет количества каждой грани
  • isRun - Определение последовательности (1-6)
  • isThreePairs - Определение трех пар
  • scoreSelection - Подсчет очков за выбранные кости
    • Специальные комбинации (run, three pairs)
    • N-of-a-kind (тройки, четверки, пятерки, шестерки)
    • Одиночные кости (1 = 100, 5 = 50)
    • Комбинации
    • Невалидные выборы
  • bestScoringSubset - Поиск лучшей комбинации среди выпавших костей

Интеграционные тесты (gameIntegration.test.js)

  • Farkle detection - Определение фаркла (нет комбинаций)
  • Hot dice detection - Определение горячих костей (все кости засчитываются)
  • Turn flow simulation - Симуляция полного хода игрока
  • Scoring edge cases - Граничные случаи подсчета очков
  • Game state transitions - Переходы между состояниями игры
  • Win condition - Условия победы

Добавление новых тестов

Чтобы добавить новый тест:

  1. Откройте соответствующий тестовый файл (gameLogic.test.js или gameIntegration.test.js)
  2. Добавьте новый test() или describe() блок
  3. Запустите тесты для проверки

Пример:

test('should handle new scenario', () => {
  const result = scoreSelection([1, 2, 3]);
  expect(result.valid).toBe(true);
  expect(result.score).toBe(100);
});

Отладка тестов

Если тест не проходит:

  1. Запустите тесты с флагом --verbose для детального вывода:

    npx jest --verbose
  2. Используйте console.log() внутри теста для отладки:

    test('debug test', () => {
      const result = scoreSelection([1, 1, 1]);
      console.log('Result:', result);
      expect(result.score).toBe(1000);
    });
  3. Запустите только один тест для изоляции проблемы:

    npx jest -t "test name"

Покрытие кода

Цель - достичь высокого покрытия кода тестами. Текущее покрытие можно проверить командой:

npm run test:coverage

Отчет будет сохранен в test/coverage/index.html.

Примечания

  • Тесты используют Jest - популярный фреймворк для тестирования JavaScript
  • Все функции игровой логики извлечены в gameLogic.js для возможности тестирования
  • Тесты не требуют браузера и выполняются в Node.js окружении
  • Для тестирования UI компонентов потребуется дополнительная настройка (например, jsdom)