@flare-engine/testing

中文文档
0.4.12发布于 2026/11/13Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 2242

确定世界工厂、假时钟、模拟输入管理器和场景快照助手

中文使用文档
文档目录5 节
  1. 安装
  2. 使用量
  3. 无头上下文
  4. 弹簧
  5. 许可证

@flare-engine/测试

ECS游戏的决定性测试助手. 默认情况下的 dev-time 软件包——它不会被捆绑到应用中,除非一个应用选择用于下面描述的一次性运行使用 弹簧。 。 。 . createFakeClock 是个决定 requestFrame 编号 : cancelFrame 替换; createTestWorld 电线 a World + 键 GameLoop + 假钟在一起; createHeadlessContext 在它的基础上 站出来 反应 GameContextValue (相机、输入、资产、平面)无反应原生或斯基亚; MockInputManager 扩展真实 InputManager 可脚本指针序列; serializeScene 编号 : snapshotsEqual 启用回归式快照测试.

安装

bun add -d @flare-engine/testing

使用量

import { createTestWorld, MockInputManager, serializeScene } from '@flare-engine/testing';
import { Position, Velocity } from '@flare-engine/ecs';

const { world, step, stepFrames } = createTestWorld({ fixedDt: 1 / 60 });
const e = world.spawn();
world.add(e, Position, { x: 0, y: 0 });
world.add(e, Velocity, { x: 1, y: 0 });

stepFrames(60, 1 / 60);

const snap = serializeScene(world, [Position]);
// components values are typed unknown; cast to the component shape to read fields
const posX = (snap.entities[0]?.components['Position'] as { x: number } | undefined)?.x;
const passed: boolean = posX === 60;

无头上下文

createHeadlessContext 返回时 createTestWorld 成员加真人 Camera2D页:1 MockInputManager,一个 AssetManager 有决心..null 装载器,一个允许 SpriteSheet 和供养者 scenes 插槽 . loop.onLateUpdate 运行 camera.update(dt) 接下来 input.update() 每个相框,相同的接线 GameView 安装.

import { getFrame } from '@flare-engine/assets';
import { createHeadlessContext } from '@flare-engine/testing';

const ctx = createHeadlessContext({ viewportWidth: 320, viewportHeight: 180 });
ctx.camera.shake(8, 0.5);
ctx.input.tap(10, 10);
ctx.stepFrames(10);

// camera.update(dt) and input.update() ran on every stepped frame
const shaking: boolean = ctx.camera.effectiveX !== ctx.camera.x;
const tapCleared: boolean = ctx.input.pointer.justPressed === false;
// the permissive sheet resolves every frame name to its single 8x8 frame
const frame = getFrame(ctx.sheet, 'any-name');

弹簧

createBenchSession 是一个测试的原始, 不是应用的。 换成 Math.random 会议期间使用种子的RNG(至 end() 恢复它 它的 whenDone 锁是保证测试 await ——不是一面同步的旗帜,一个渲染回路就可以对每个帧进行投票. 它的用意是将一个决定性场景包在一个测试跑者身上.

应用板凳的操纵器 — 应用码中船舶的外观跑取器,其完成的套接字(同步) isBenchDone() 其旗帜和汇报 消费者拥有。引擎不运送一个,没有运行时间包再出口 createBenchSession。在应用程序中写下吊带;与其共享的只是引擎实际需要的东西(例如: SeededRNG 从 @flare-engine/math) (中文(简体) ).

运行时需要种子会话的应用程序可能列出 @flare-engine/testing 作为经常 dependency 而不是一个 devDependency它本身的依赖性是: @flare-engine/* 运行时间软件包 assets, (中文(简体) ), core, (中文(简体) ), ecs, (中文(简体) ), input, (中文(简体) ), math 财务报告和审定财务报表 render 仅此而已,没有同伴的依赖关系,所以引擎外没有任何东西进入捆绑.

见 API 规格。 。 。 .

许可证

阿帕奇 - 2.0

版本与发布记录

@flare-engine/testing 共发布 17 个版本,首次发布于 2026/06/10;过去 12 个月发布了 17 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.12latest2026/11/133 天前
0.4.112026/11/123 天前
0.4.102026/11/087 天前
0.4.82026/11/0610 天前
0.4.72026/11/0411 天前
0.4.62026/10/3115 天前

关于 @flare-engine/testing 的常见问题

@flare-engine/testing 是什么?

确定世界工厂、假时钟、模拟输入管理器和场景快照助手

如何安装 @flare-engine/testing?

在项目目录运行 npm install @flare-engine/testing,或使用 pnpm add / yarn add / bun add。

@flare-engine/testing 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@flare-engine/testing 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@flare-engine/testing 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@flare-engine/testing 可以商用吗?

@flare-engine/testing 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@flare-engine/testing 的下载量有多少?

根据 npm 官方下载统计,@flare-engine/testing 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,242 次,日均约 75 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@flare-engine/testing 还在维护吗?

最新版本 0.4.12 发布于 2026/11/13(3 天前);至今共发布 17 个版本,其中过去 12 个月发布了 17 个;首次发布于 2026/06/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。