Перейти к содержимому

PackTest

Fabric-мод для тестирования датапаков, с датапаками!

Fabric
Загрузчики
Fabric
Скачиваний на Modrinth
16,6 тыс.
Подписчиков на Modrinth
21
версий
45
Обновлён
20 сентября 202620 сент.
Опубликован
в 2023
Test results with messages — A few tests with their failure messages · свайп

Коротко о моде

Работает на Fabric
Для Minecraft 1.20.4–26.3
Ставится только на сервер; игрокам ставить не нужно
Последняя версия — 2.7.0 от 20 сентября 2026
Нужен Fabric API
Лицензия MIT — бесплатно
Где нужен
В игрене нуженНа сервереобязателен

Ставится только на сервер; игрокам ставить не нужно

Версии игры1.20.4–26.3
Описание переведено автоматическиПоказать оригинал (EN)

PackTest

PackTest позволяет писать игровые тесты в датапаке. Тесты — это файлы *.mcfunction в папке test. Их можно использовать для проверки собственных датапаков.

Пример

data/example/test/foo.mcfunction

#> Summons an armor stand and finds it
# @template example:small_platform
# @optional

summon armor_stand ~1.5 ~1 ~1.5
execute positioned ~1.5 ~1 ~1.5 run assert entity @e[type=armor_stand,dx=0]

assert predicate example:test

setblock ~1 ~1 ~1 grass_block
execute if block ~1 ~1 ~1 stone run succeed

fail "Oh no"

Асинхронные тесты

Тестовые функции могут быть асинхронными — с помощью ключевого слова await!

setblock ~ ~ ~ stone
summon item ~ ~6 ~

await entity @e[type=item,distance=..2]

await delay 1s

data merge entity @e[type=item,distance=..2,limit=1] {Motion: [0.0, 0.01, 0.0]}

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

Тесты можно запускать прямо в игре командой test.

  • test runall: запускает все тесты
  • `test runall `: запускает все тесты из указанного пространства имён
  • `test run `: запускает тест с указанным именем
  • test runfailed: запускает все ранее проваленные тесты
  • test runthis: запускает ближайший тест
  • test runthese: запускает все тесты в радиусе 200 блоков

Автоматический тестовый сервер

Тесты можно запускать и автоматически, например в CI. Если задан параметр -Dpacktest.auto, игровой тестовый сервер запустится сам с загруженными тестами. Процесс завершится, когда все тесты закончатся, а код выхода будет равен числу проваленных тестов.

Установка -Dpacktest.auto.annotations включает вывод аннотаций GitHub для всех провалов тестов и ошибок загрузки ресурсов.

Следующий пример можно адаптировать в workflow GitHub Actions.

on: [push, pull_request]

env:
  # Make sure to update these links!
  TEST_FABRIC_SERVER: https://meta.fabricmc.net/v2/versions/loader/1.20.4/0.15.3/0.11.2/server/jar
  TEST_FABRIC_API: https://cdn.modrinth.com/data/P7dR8mSH/versions/JMCwDuki/fabric-api-0.92.0%2B1.20.4.jar
  TEST_PACKTEST: https://cdn.modrinth.com/data/XsKUhp45/versions/18smpIeE/packtest-1.6-mc1.20.4.jar

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: Download and prepare files
        run: |
          curl -o server.jar $TEST_FABRIC_SERVER
          mkdir mods
          curl -o mods/fabric-api.jar $TEST_FABRIC_API
          curl -o mods/packtest.jar $TEST_PACKTEST
          mkdir -p world/datapacks
          cp -r datapack world/datapacks/datapack
      - name: Run tests
        run: |
          java -Xmx2G -Dpacktest.auto -Dpacktest.auto.annotations -jar server.jar nogui

Команды

fail

  • `fail `: проваливает текущий тест и выходит из функции

succeed

  • succeed: всегда завершает текущий тест успешно и выходит из функции

assert

  • `assert `: если условие не выполняется, проваливает текущий тест и выходит из функции
  • `assert not `: если условие выполняется, проваливает текущий тест и выходит из функции

await

  • `await `: похоже на assert, но проверяет условие каждый тик, пока тест не истечёт или условие не выполнится
  • `await not `: проверяет условие каждый тик, пока оно не перестанет выполняться
  • `await delay `: ждёт указанное время с единицей измерения

Условия

  • `block `: проверяет, соответствует ли блок в указанной позиции предикату блока
  • data ...: проверяет NBT-данные с тем же синтаксисом, что и execute if score
  • `entity `: проверяет, соответствует ли селектор какой-либо сущности (также может находить сущности за пределами границ структуры)
  • `predicate `: проверяет предикат в датапаке
  • score ...: проверяет счета с тем же синтаксисом, что и execute if score
  • `chat []`: проверяет, было ли отправлено сообщение в чат за прошлый тик, соответствующее регулярному выражению

Dummies

Фейковых игроков можно создавать с помощью команды /dummy. Dummies не сохраняют и не загружают свои данные с диска, а также не загружают свой скин.

  • `dummy spawn`: создаёт нового dummy
  • `dummy respawn`: возрождает dummy после того, как его убили
  • `dummy leave`: заставляет dummy покинуть сервер
  • `dummy jump`: заставляет dummy прыгнуть, если он сейчас на земле
  • `dummy sneak [true|false]`: заставляет dummy зажать shift или отпустить его (не то же самое, что присесть)
  • `dummy sprint [true|false]`: заставляет dummy бежать или перестать бежать
  • `dummy drop [all]`: заставляет dummy выбросить текущий предмет в основной руке — либо один предмет, либо весь стак
  • `dummy swap`: заставляет dummy поменять местами предметы в основной и второй руке
  • `dummy selectslot`: заставляет dummy выбрать другой слот хотбара
  • `dummy use item`: заставляет dummy использовать предмет в руке — в основной или во второй
  • `dummy use block []`: заставляет dummy использовать предмет в руке на позиции блока
  • `dummy use entity `: заставляет dummy использовать предмет в руке на сущности
  • `dummy attack `: заставляет dummy атаковать сущность предметом в основной руке
  • `dummy mine `: заставляет dummy добыть блок

Директивы

Тесты можно настраивать, размещая определённые директивы в виде особых комментариев в начале функции теста.

  • @template: ресурсная локация шаблона структуры, используемого для теста, по умолчанию — пустая структура 1x1x1
  • @timeout: целое число, задающее тайм-аут, по умолчанию 100
  • @optional: разрешено ли этому тесту провалиться, по умолчанию false; если после директивы нет значения, считается true
  • @dummy: создавать ли dummy в начале теста и назначать @s этому dummy, принимает позицию, по умолчанию ~0.5 ~ ~0.5
  • @batch: имя пакета для этого теста, по умолчанию packtestBatch
  • @beforebatch: команда для выполнения перед этим пакетом, может быть только одна на пакет
  • @afterbatch: команда для выполнения после этого пакета, может быть только одна на пакет

Частые вопросы

Как установить PackTest?

Установите Fabric под свою версию Minecraft, скачайте PackTest под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть PackTest?

У PackTest есть сборки для Minecraft 1.20.4–26.3.

Нужен ли PackTest на сервере?

Ставится только на сервер; игрокам ставить не нужно

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее