
PackTest
用于测试数据包的Fabric模组,支持数据包!
查看大图PackTest
PackTest 允许你在数据包中编写游戏测试。测试文件是 test 文件夹中的 *.mcfunction 文件。它们可用于测试自定义数据包。
示例
data/example/test/foo.mcfunction
#> 召唤一个盔甲架并找到它
# @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 <namespace>:运行指定命名空间的所有测试test run <test>:运行指定名称的测试test runfailed:运行所有之前失败的测试test runthis:运行最近的测试test runthese:运行 200 格范围内的所有测试
自动测试服务器
测试也可以自动运行,例如在 CI 环境中。当设置了 -Dpacktest.auto 时,游戏测试服务器将自动启动并加载测试。当所有测试完成时,进程将退出,退出代码设置为失败测试的数量。
设置 -Dpacktest.auto.annotations 将为所有测试失败和资源加载错误输出 GitHub 注解。
以下示例可以改编为 GitHub 操作工作流。
on: [push, pull_request]
env:
# 确保更新这些链接!
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: 下载并准备文件
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: |
java -Xmx2G -Dpacktest.auto -Dpacktest.auto.annotations -jar server.jar nogui
命令
fail
fail <文本组件>:使当前测试失败并从函数返回
succeed
succeed:始终使当前测试成功并从函数返回
assert
assert <条件>:如果条件不成立,则使当前测试失败并从函数返回assert not <条件>:如果条件成立,则使当前测试失败并从函数返回
await
await <条件>:与 assert 类似,但每 tick 持续尝试该条件,直到测试超时或条件成立await not <条件>:持续尝试该条件直到其失败await delay <时间>:等待指定时间(带单位)
条件
block <位置> <方块>:检查指定位置的方块是否匹配方块谓词data ...:使用与execute if score相同的语法检查 NBT 数据entity <选择器>:检查选择器是否匹配任何实体(也可以查找结构边界之外的实体)predicate <谓词>:检查数据包中的谓词score ...:使用与execute if score相同的语法检查分数chat <模式> [<接收者>]:检查过去一个 tick 内是否发送了匹配正则表达式模式的聊天消息
假玩家
可以使用 /dummy 命令生成假玩家。假玩家不会从磁盘保存或加载数据,也不会加载皮肤。
dummy <名称> spawn:生成一个新的假玩家dummy <名称> respawn:在假玩家被击杀后重新生成dummy <名称> leave:使假玩家离开服务器dummy <名称> jump:使假玩家跳跃(如果当前在地面上)dummy <名称> sneak [true|false]:使假玩家潜行或取消潜行(不等同于当前蹲下状态)dummy <名称> sprint [true|false]:使假玩家疾跑或取消疾跑dummy <名称> drop [all]:使假玩家丢弃当前主手物品,可以是一个物品或整组物品dummy <名称> swap:使假玩家交换主手和副手物品dummy <名称> selectslot:使假玩家选择不同的快捷栏槽位dummy <名称> use item:使假玩家使用手中的物品(主手或副手)dummy <名称> use block <位置> [<方向>]:使假玩家对方块位置使用手中的物品dummy <名称> use entity <实体>:使假玩家对实体使用手中的物品dummy <名称> attack <实体>:使假玩家用主手攻击实体dummy <名称> mine <位置>:使假玩家挖掘方块
指令
可以通过在测试函数开头放置特殊注释形式的指令来自定义测试。
@template:用于测试的结构模板的资源位置,默认为空的 1x1x1 结构@timeout:指定超时时间的整数,默认为100@optional:是否允许此测试失败,默认为false,如果指令后没有值则视为true@dummy:是否在测试开始时生成假玩家并将@s设置为该假玩家,可接受一个位置参数,默认为~0.5 ~ ~0.5@batch:此测试的批次名称,默认为packtestBatch@beforebatch:在此批次之前运行的命令,每个批次只能有一个@afterbatch:在此批次之后运行的命令,每个批次只能有一个
正在加载版本记录…


正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。