원클릭으로
x4-e2e-fixtures
Use when x4-e2e-test-doc-details needs fixture patch rules or helper guidance for X4 E2E test data.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when x4-e2e-test-doc-details needs fixture patch rules or helper guidance for X4 E2E test data.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when refining X4 `e2e_tests.md` into detailed E2E task, fixture, and implementation knowledge documents before Playwright implementation.
Use when creating or updating only the high-level X4 E2E test plan `e2e_tests.md` before detail expansion.
Review X4 E2E test documentation draft and gate x4-e2e-test-doc completion. Must run in a dedicated isolated subagent. Trigger with /x4:e2e-test-doc-viewer <change-name>.
Implement Playwright E2E tests for X4 changes from `e2e_test_tasks.md` and validate task-to-test mapping. Trigger with /x4:e2e-test-impl <change-name>.
Run change-scoped X4 Playwright E2E tests and validate implementation coverage against `e2e_test_tasks.md`. Trigger with /x4:e2e-test-run <change-name>.
Orchestrate X4 E2E-only test workflow across high-level docs, detailed docs, review, implementation, and run phases. Trigger with /x4:e2e-test <change-name>.
| name | x4-e2e-fixtures |
| description | Use when x4-e2e-test-doc-details needs fixture patch rules or helper guidance for X4 E2E test data. |
为 x4-e2e-test-doc-details 提供 fixture patch 规则和 helper 使用约定。本 skill 不作为完整 E2E 流程中的独立阶段运行。
在完整 E2E 流程中,fixture 规划由 x4-e2e-test-doc-details 执行。本 skill 是该阶段的规则参考:
x4-e2e-test-doc
x4-e2e-test-doc-details
x4-e2e-test-doc-viewer
x4-e2e-test-impl
x4-e2e-test-run
不要把本 skill 当成单独运行入口。测试实现阶段消费 x4-e2e-test-doc-details 产出的 fixtures.md 和 *.patch.json。
tests/e2e/<change-name>/fixtures/<scenario>-save.patch.jsontests/e2e/<change-name>/fixtures/<scenario>-db.patch.json(少数例外)openspec/changes/<change-name>/fixtures.mdopenspec/changes/<change-name>/fixtures/generate-<scenario>-save-patch.tsopenspec/changes/<change-name>/fixtures/generate-<scenario>-db-patch.ts(少数例外)*.patch.json 属于测试流程,测试直接 import。fixtures.md 说明每个 E2E 测试任务是否需要 fixture 数据以及数据性质。generate-*.ts 只是生成工具,不参与测试运行。
openspec/changes/<change-name>/e2e_tests.mdopenspec/changes/<change-name>/e2e_test_tasks.mdopenspec/changes/<change-name>/knowledge.mdtests/fixtures/save.json,少数必要场景使用 tests/fixtures/db.json按顺序确认基础文件:
tests/fixtures/save.jsontests/fixtures/db.jsontests/e2e/**/fixtures/、tests/unified-e2e/**tests/seeds/*.yaml找不到可复用基础文件时停止并说明 blocker,不凭空创建完整 fixture。
主要 patch 内容应针对 save.json。db.json 和 localStorage 状态优先通过 UI 操作自然形成。
使用 db.json patch 只允许少数必要场景:
fixtures.md 中说明理由。普通配置、视图切换、筛选条件、绑定选择、用户可操作状态,应在测试中通过 UI 操作完成,而不是写入 db.json patch。
每个使用本 skill 的 change 都必须维护:
openspec/changes/<change-name>/fixtures.md
fixtures.md 的职责是只记录 e2e_tests.md 中少数需要额外 fixture patch 的主要任务,以及这些任务需要什么性质的数据。大部分 E2E 任务应直接使用基础 fixture 或测试内自然操作,不需要写入 fixtures.md。
推荐格式:
# E2E Fixtures
## 1 分组入口
- [ ] 1.2 自动分组结果可被确认
- fixture: group-entry-save.patch.json
- target: save.json
- data: 增加包含多玩家站点的 save 片段,用于触发自动分组候选
## 2 地图联动
- [ ] 2.1 地图显示分组后的虚拟站点
- fixture: map-virtual-station-save.patch.json
- target: save.json
- data: 增加玩家站点坐标、关联星区和地图实体
规则:
fixtures.md。fixture: none。e2e_tests.md。fixture: <name>.patch.json 表示该任务需要对应 patch。data: 描述数据性质,不写完整 JSON 明细。fixtures.md 不替代 knowledge.md;locator、UI 操作经验仍写入 knowledge.md。target: db.json 必须额外写明 reason:,说明为什么不能通过 UI 操作形成该 localStorage 状态。每个 patch 必须有具体业务名,一个测试方案可以 import 多个 patch。
推荐:
tests/e2e/<change-name>/fixtures/
live-binding-save.patch.json
group-entry-save.patch.json
corrupt-binding-db.patch.json
字段:
$target: 必填,优先 "save.json";"db.json" 仅用于必要例外$delete: 可选,dot path 数组$merge: 可选,要深度合并到基础 JSON 的对象片段$append: 可选,dot path -> array items至少存在 $delete、$merge、$append 之一。
示例:
{
"$target": "db.json",
"$delete": [
"x4_empire_data.activeEmpire.obsoleteFlag"
],
"$merge": {
"x4_empire_data": {
"activeId": "empire-auto-group"
}
},
"$append": {
"x4_empire_data.activeEmpire.stations": [
{
"id": "station-auto-group-alpha",
"name": "Auto Group Alpha"
}
]
}
}
执行顺序固定:
$delete$merge$append数组在 $merge 中默认整体替换;需要追加数组项时使用 $append。
必须按下面顺序创建 fixture 产物:
fixtures.md,列出需要 patch 的 E2E 任务、patch 文件名、target 和数据性质。fixtures.md 中每个计划中的 patch 判断来源:
*.patch.json。openspec/changes/<change-name>/fixtures/generate-<scenario>-<target>-patch.ts。tests/e2e/<change-name>/fixtures/<scenario>-<target>.patch.json。tests/e2e/<change-name>/fixtures/<scenario>-<target>.patch.json。validate_e2e_fixture_patch.py 校验所有 patch。生成脚本命名:
openspec/changes/<change-name>/fixtures/generate-<scenario>-<target>-patch.ts
脚本职责:
save.json;仅必要例外读取 db.json。$delete/$merge/$append patch。tests/e2e/<change-name>/fixtures/<scenario>-<target>.patch.json。生成脚本不得修改基础 fixture,不得被测试运行依赖。 不要先手写一个本应由生成脚本产出的 patch,再补生成脚本;这会导致 patch 与生成逻辑漂移。
每个 patch 写出后运行 x4-e2e-test-doc-details 所属脚本:
python3 .trae/skills/x4-e2e-test-doc-details/scripts/validate_e2e_fixture_patch.py \
tests/e2e/<change-name>/fixtures/<scenario>-save.patch.json --json
校验脚本只在内存中应用 patch,不生成临时文件,不修改基础文件,不修改 patch。
测试直接 import 基础文件和 patch 文件,使用 tests/helper/e2eFixturePatch.ts。save.json patch 主要用于 save/live 数据;localStorage 状态尽量通过 UI 操作形成。
import dbFixture from '../../fixtures/db.json' with { type: 'json' }
import corruptBindingPatch from './fixtures/corrupt-binding-db.patch.json' with { type: 'json' }
import { loadDbFixtureWithPatches } from '../../helper/e2eFixturePatch'
test.beforeEach(async ({ page }) => {
await loadDbFixtureWithPatches(page, {
base: dbFixture,
patches: [corruptBindingPatch],
locale: 'zh-CN',
})
})
多个 patch 按数组顺序应用,后面的 patch 可以覆盖前面的 $merge 结果。
tests/fixtures/db.json 或 tests/fixtures/save.json。generate-*.ts。db.json patch;应通过 UI 操作形成。localStorage.clear()。x4-e2e-test-doc-details/scripts/validate_e2e_fixture_patch.py 结果。