# @flare-engine/testing 中文文档

规范地址：https://npmcn.com/package/%40flare-engine/testing/

版本：0\.4\.12
npm 元数据更新时间：2026-11-12T19:46:50.483Z
中文译文更新时间：2026-11-14T22:50:22.244Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40flare-engine/testing
原文对照：https://npmcn.com/package/%40flare-engine/testing/?lang=original
项目主页：https://github.com/grzott/flare-engine#readme
源码仓库：https://github.com/grzott/flare-engine

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：89.6 kB，12 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：6 个
- 首次发布：2026-06-09T16:19:46.620Z
- 最新版本发布：2026-11-12T19:46:50.037Z
- 近 30 天下载量：2242（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 17 个）

## 中文简介

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

## 安装

```sh
npm install @flare-engine/testing
```

也可以使用：`pnpm add @flare-engine/testing`、`yarn add @flare-engine/testing`、`bun add @flare-engine/testing`

## README

# @flare-engine/测试

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

## 安装

```sh
bun add -d @flare-engine/testing
```

## 使用量

```ts
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` 安装.

```ts
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 规格](https://github.com/grzott/flare-engine/blob/main/docs/design/api-specs.md#flare-enginetesting--4kb-raw)。 。 。 .

## 许可证

阿帕奇 - 2.0

## 常见问题

### @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 和提交记录判断。

