diff --git a/src/components/game-distribution/GameDistributionPages.test.tsx b/src/components/game-distribution/GameDistributionPages.test.tsx index 59202243e..b209e230d 100644 --- a/src/components/game-distribution/GameDistributionPages.test.tsx +++ b/src/components/game-distribution/GameDistributionPages.test.tsx @@ -3162,15 +3162,22 @@ describe('GameLineagePage 筛选器 / 主干线 / 信息面板(文档对齐) '创作族谱树', )) as HTMLElement; const view = readCanvasViewport(canvas); - // 窄屏图谱视图是**横版**:代际沿 x 推进,且不再渲染左侧代际轴(角标承担代际信息)。 + // 窄屏图谱视图是**横版**:代际沿 x 推进(同代同 left、兄弟靠 top 分开), + // 且不再渲染左侧代际轴(角标承担代际信息)。 expect(canvas.querySelector('.game-lineage-canvas__axis')).toBeNull(); - expect( - new Set( - [...canvas.querySelectorAll('.game-lineage-node')].map((card) => - Number.parseFloat((card as HTMLElement).style.left), - ), - ).size, - ).toBeGreaterThan(1); + const cards = [...canvas.querySelectorAll('.game-lineage-node')].map( + (card) => card as HTMLElement, + ); + const generationOne = cards.filter( + (card) => card.getAttribute('data-generation') === '1', + ); + expect(generationOne.length).toBeGreaterThanOrEqual(2); + expect(new Set(generationOne.map((card) => card.style.left)).size).toBe( + 1, + ); + expect(new Set(generationOne.map((card) => card.style.top)).size).toBe( + generationOne.length, + ); expect(Math.round(view.scale * 100)).not.toBe(100); expect(canvas.querySelector('.game-lineage-zoom')?.textContent).toBe( `${Math.round(view.scale * 100)}%`, @@ -3185,6 +3192,15 @@ describe('GameLineagePage 筛选器 / 主干线 / 信息面板(文档对齐) expect( visible.some((card) => card.getAttribute('data-generation') === '0'), ).toBe(true); + // 移动端紧凑卡片按既有设计**省掉作者行**(CSS `.game-lineage-node--compact`:卡片更小、 + // 字段更少)。作者名在桌面画布、大纲行与详情页都有;这条断言把这个差异固定下来, + // 避免它再次变成「实现与断言不同步」。 + expect( + canvas.querySelectorAll('.game-lineage-node--compact').length, + ).toBe(cards.length); + expect(canvas.querySelectorAll('.game-lineage-node__author').length).toBe( + 0, + ); } finally { widthSpy.mockRestore(); heightSpy.mockRestore();