Files
ttstd-infinite-canvas/web/test/live2d-avatar-loading.test.tsx
Rou 054dab28cc fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组 (#773)
* fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组

进入画布时形象配置与 Live2D 首帧未就绪不再显示默认球,改为加载提示,失败才回退。

新导入模型一级目录默认未分类、二级渠道展示名默认跟随上游 ID;历史非空分组(含与模型 ID 同名)保留。

拉取模型弹窗默认只勾选已存在模型并移除逐项已存在字样;一级分组下拉点击即展开全部选项。

* style(web): 画布与模型导入 - 按 Prettier 规范格式化改动文件

修复 PR 中 Web checks 的格式化检查失败:Live2D 启动器 JSX、模型导入选择工具函数与 Live2D 加载测试按项目 Prettier 配置重新排版,不改变行为。

* test(web): Live2D 生命周期 - 修复 bun 1.3.9 下 text 导入与模块导入冲突

agent-live2d-lifecycle 曾用 with { type: text } 导入 live2d-avatar.tsx,bun 1.3.9 会按路径复用该缓存,导致新增的模块导入拿不到 Live2DAvatar 具名导出并报 SyntaxError。改为 readFileSync 读取源码文本,本地以 bun 1.3.9 复现并验证通过。
2026-10-14 09:36:01 +08:00

28 lines
1.3 KiB
TypeScript

import { expect, test } from "bun:test";
import { renderToStaticMarkup } from "react-dom/server";
import { Live2DAvatar } from "../src/components/canvas/live2d-avatar";
function renderLoadingAvatar(reducedMotion = false) {
return renderToStaticMarkup(<Live2DAvatar url="/api/public/appearance/live2d/model-id/model.model3.json" width={165} height={220} reducedMotion={reducedMotion} fallback={<span data-default-avatar>默认球</span>} />);
}
test("Live2D first render shows loading rather than the failure fallback", () => {
const markup = renderLoadingAvatar();
expect(markup).not.toContain("data-default-avatar");
expect(markup).not.toContain("默认球");
expect(markup).toContain('role="status"');
expect(markup).toContain("正在加载 Live2D 模型");
expect(markup).toContain('aria-busy="true"');
expect(markup).toContain("visibility:hidden");
expect(markup).toContain("width:165px;height:220px");
});
test("Live2D loading respects reduced motion without showing the default avatar", () => {
expect(renderLoadingAvatar()).toContain("motion-safe:animate-spin");
const markup = renderLoadingAvatar(true);
expect(markup).not.toContain("animate-spin");
expect(markup).not.toContain("data-default-avatar");
expect(markup).toContain("正在加载 Live2D 模型");
});