工程(测试夹具术语修正): 三件测试 mock 串 哥布林→地精(项目定名见 enemy.tres:761「goblin 地精」)——随 iter39 报告§六补录批的文档面 4f9de5fa 同源,主区直提被车道铁律拦,按规走 worktree 批收编;夹具设值与断言同串自洽,零行为改动

This commit is contained in:
DKChan committed 2026-10-27 18:50:30 +08:00
1 parent 4f9de5fafd
commit 98d3a2ec38
3 files changed
+10 -10

No files matched your search

@@ -219,7 +219,7 @@ func _test_source_death_void(db) -> void:
func _unit_fixture() -> Dictionary:
return {
"enemy_id": "fixture_enemy",
"display_name": "哥布林",
"display_name": "地精",
"hp": 5, "max_hp": 5, "atk": 1,
"pool": [], "pending_skill": "", "roll_seq": 0, "basic_streak": 0,
"armor_type": "light", "armor_class": 0, "attack_type": "normal",
@@ -131,11 +131,11 @@ func _init() -> void:
rp.stage = fstage
rp.board_view = main.board_view
rp.settlement_fx = ffx
rp._play_settlement_mark({"type": "damage", "target": "哥布林", "target_id": "goblin_b", "value": 3})
check(fstage.calls.size() == 1 and fstage.calls[0] == ["goblin_b", "哥布林"],
rp._play_settlement_mark({"type": "damage", "target": "地精", "target_id": "goblin_b", "value": 3})
check(fstage.calls.size() == 1 and fstage.calls[0] == ["goblin_b", "地精"],
"结算标出按行 target_id 解析站桩(id 与名同传——d12)〔wd12〕")
rp._play_cross_zone_fx({"type": "damage", "target": "哥布林", "target_id": "goblin_b", "value": 3})
check(fstage.calls.size() == 2 and fstage.calls[1] == ["goblin_b", "哥布林"],
rp._play_cross_zone_fx({"type": "damage", "target": "地精", "target_id": "goblin_b", "value": 3})
check(fstage.calls.size() == 2 and fstage.calls[1] == ["goblin_b", "地精"],
"跨区弹道按行 target_id 解析站桩(id 与名同传——d12)〔wd12〕")
check(ffx.calls.size() == 2, "两路解析成功后演出层各接一拍(记参面非空)〔wd12〕")
rp.free()
@@ -65,8 +65,8 @@ func _init() -> void:
var s2 = StandeeBodyScript.new("enemy")
stage.world.add_child(s1)
stage.world.add_child(s2)
s1.set_data({"display_name": "哥布林", "enemy_id": "goblin_a", "hp": 3, "max_hp": 3, "order": 1})
s2.set_data({"display_name": "哥布林", "enemy_id": "goblin_b", "hp": 3, "max_hp": 3, "order": 2})
s1.set_data({"display_name": "地精", "enemy_id": "goblin_a", "hp": 3, "max_hp": 3, "order": 1})
s2.set_data({"display_name": "地精", "enemy_id": "goblin_b", "hp": 3, "max_hp": 3, "order": 2})
s1.position = Vector2(10, 20)
s2.position = Vector2(200, 20)
stage._cards.clear()
@@ -78,15 +78,15 @@ func _init() -> void:
Kit.check("空 id / 未登记 id 恒不命中(名兜底归调用点)〔wd12〕",
stage._card_by_id("") == null and stage._card_by_id("no_such") == null)
# 口一:on_step_row_fx —— 伤害行携 target_id,闪白落点须在 id 指向的站桩
stage.on_step_row_fx({"type": "damage", "target": "哥布林", "target_id": "goblin_b"})
stage.on_step_row_fx({"type": "damage", "target": "地精", "target_id": "goblin_b"})
await create_timer(0.6).timeout # 弹道到达拍 0.33s + 余量
Kit.check("伤害行按 target_id 命中正确站桩(闪白落点)〔wd12〕",
s2._flash_count == 1 and s1._flash_count == 0)
# 口二:enemy_standee_center —— id 先、display_name 兜底
var c_b = stage.enemy_standee_center("goblin_b", "哥布林")
var c_b = stage.enemy_standee_center("goblin_b", "地精")
var c_b_expect: Vector2 = stage.world_to_shell(s2.position + s2.box * 0.5)
Kit.check("弹道落点按 target_id 取站桩中心〔wd12〕", c_b != null and c_b == c_b_expect)
var c_fallback = stage.enemy_standee_center("", "哥布林")
var c_fallback = stage.enemy_standee_center("", "地精")
var c_fallback_expect: Vector2 = stage.world_to_shell(s1.position + s1.box * 0.5)
Kit.check("无 target_id 时按名兜底同旧行为(首命中)〔wd12〕", c_fallback != null and c_fallback == c_fallback_expect)