From 6e577f3756d4c82e72d18d6cbcd685dcf2c4dc23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 17:52:19 +0800 Subject: [PATCH] fix(test): stabilize existing snapshots and collect nested failures --- .github/workflows/test-build.yml | 2 +- specs/070-existing-test-determinism/acceptance.md | 3 +++ specs/070-existing-test-determinism/plan.md | 3 +++ specs/070-existing-test-determinism/spec.md | 5 +++++ specs/070-existing-test-determinism/tasks.md | 5 +++++ .../example/test/search/search_page_test.dart | 10 ++++++---- .../text/t_component_centering_golden_test.dart | 7 +++++-- .../test/tool/run_visual_regression_test.dart | 8 ++++++++ 8 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 specs/070-existing-test-determinism/acceptance.md create mode 100644 specs/070-existing-test-determinism/plan.md create mode 100644 specs/070-existing-test-determinism/spec.md create mode 100644 specs/070-existing-test-determinism/tasks.md diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 3bfe756acb..a48fdc72ee 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -141,7 +141,7 @@ jobs: name: golden-failures-flutter-3.32.0 path: | tdesign-component/test/**/failures/ - tdesign-component/example/test/failures/ + tdesign-component/example/test/**/failures/ if-no-files-found: ignore retention-days: 7 diff --git a/specs/070-existing-test-determinism/acceptance.md b/specs/070-existing-test-determinism/acceptance.md new file mode 100644 index 0000000000..a5e912a255 --- /dev/null +++ b/specs/070-existing-test-determinism/acceptance.md @@ -0,0 +1,3 @@ +# 验收 + +拆分来源:053ecf89。原组合分支 Linux CI 38714603359 的 Calendar/Indexes 既有 Golden 已通过;本分支需独立核对 CI。没有更新 PNG、降低阈值或更改生产日期逻辑。Search 原有 showTestModule=false 契约保留。 diff --git a/specs/070-existing-test-determinism/plan.md b/specs/070-existing-test-determinism/plan.md new file mode 100644 index 0000000000..6f74398704 --- /dev/null +++ b/specs/070-existing-test-determinism/plan.md @@ -0,0 +1,3 @@ +# 方案 + +仅在居中测试 fixture 中设置 todayDayStyle;Search 通过 TSearchBar 的 hintText 定位内部 TextField。artifact 收集改为 example/test/**/failures/ 并由现有调度器自测校验。独立基于 develop,可先于发布准备合并。 diff --git a/specs/070-existing-test-determinism/spec.md b/specs/070-existing-test-determinism/spec.md new file mode 100644 index 0000000000..07b7574c7f --- /dev/null +++ b/specs/070-existing-test-determinism/spec.md @@ -0,0 +1,5 @@ +# 既有测试确定性与失败取证修复 + +固定 Calendar/Indexes 居中测试中的今日文字色,避免真实日期污染固定月份截图;保留组件今日和选中态专门测试。修复 Search 功能测试对子 TextField 的过时定位,以及 GitHub 嵌套 Demo 失败图片收集路径。 + +不改变生产组件、Demo 显示策略、测试集合、比较容差或任何 PNG 基线。 diff --git a/specs/070-existing-test-determinism/tasks.md b/specs/070-existing-test-determinism/tasks.md new file mode 100644 index 0000000000..bd1ea4c4a4 --- /dev/null +++ b/specs/070-existing-test-determinism/tasks.md @@ -0,0 +1,5 @@ +# 任务 + +- [x] 从发布准备 PR 拆出既有测试修复。 +- [x] 保留既有断言语义及精确 Golden 比较。 +- [ ] 核对拆分后 CI 与双版本功能测试。 diff --git a/tdesign-component/example/test/search/search_page_test.dart b/tdesign-component/example/test/search/search_page_test.dart index 748b1f8d84..477f15cfd2 100644 --- a/tdesign-component/example/test/search/search_page_test.dart +++ b/tdesign-component/example/test/search/search_page_test.dart @@ -96,10 +96,12 @@ void main() { await tester.pumpWidget(buildPage()); await tester.pump(); - final resultField = find.byWidgetPredicate( - (widget) => - widget is TextField && - widget.decoration?.hintText == '输入tdesign,有预览结果', + final resultField = find.descendant( + of: find.byWidgetPredicate( + (widget) => + widget is TSearchBar && widget.hintText == '输入tdesign,有预览结果', + ), + matching: find.byType(TextField), ); await tester.tap(resultField); await tester.pump(); diff --git a/tdesign-component/test/components/text/t_component_centering_golden_test.dart b/tdesign-component/test/components/text/t_component_centering_golden_test.dart index c9e238094c..687ec417f3 100644 --- a/tdesign-component/test/components/text/t_component_centering_golden_test.dart +++ b/tdesign-component/test/components/text/t_component_centering_golden_test.dart @@ -266,9 +266,12 @@ void _calendarIndexesScenes() { brightness: brightness, extensions: [ token, - const TCalendarThemeData( + TCalendarThemeData( + // 本场景只验证居中,不让真实“今天”改变固定日期的截图。 + // 今日状态的颜色由 Calendar 独立状态测试覆盖。 + todayDayStyle: TextStyle(color: token.textColorPrimary), height: 550, - monthTitleStyle: TextStyle( + monthTitleStyle: const TextStyle( fontSize: 24, height: 2, color: Colors.purple, diff --git a/tdesign-component/test/tool/run_visual_regression_test.dart b/tdesign-component/test/tool/run_visual_regression_test.dart index a9b5d3e6fa..28934a98d8 100644 --- a/tdesign-component/test/tool/run_visual_regression_test.dart +++ b/tdesign-component/test/tool/run_visual_regression_test.dart @@ -93,6 +93,14 @@ void main() { ); }); + test('GitHub uploads failures from nested Demo directories', () { + final workflow = File( + '../.github/workflows/test-build.yml', + ).readAsStringSync(); + expect(workflow, contains('tdesign-component/test/**/failures/')); + expect(workflow, contains('tdesign-component/example/test/**/failures/')); + }); + test('visual regression suite names are unique', () { final names = visualTestSuites.map((suite) => suite.name).toList(); expect(names.toSet(), hasLength(names.length));