From af1ed9aefff7f4042c529cfefc4bbf6990233c39 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Thu, 25 Jun 2026 11:08:44 +0800 Subject: [PATCH] =?UTF-8?q?test(client):=20=E6=95=B4=E5=B1=8F=20golden=20?= =?UTF-8?q?=E8=BF=98=E5=8E=9F=E9=97=B8=20+=20=E5=8F=AF=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=20golden=20=E9=AA=A8=E6=9E=B6=EF=BC=88=E5=9F=BA=E5=BB=BA?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test/support/golden_harness.dart:pumpGolden(viewport=physical÷dpr/给足高度/ provider 覆盖)+ goldenAcrossThemes(A/B/C 三主题组)。 test/golden/inventory_list_golden_test.dart:库存列表整屏 × 三主题 golden (fake AsyncNotifier 喂 canned 数据 + isReadonly 覆盖 + SP mock),入库作回归闸。 保真目检:shoot 原型 + montage 与 goldens 并排(见 design-distill flutter-golden.md)。 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX --- .../test/golden/goldens/inventory_list_a.png | Bin 0 -> 45883 bytes .../test/golden/goldens/inventory_list_b.png | Bin 0 -> 46094 bytes .../test/golden/goldens/inventory_list_c.png | Bin 0 -> 46330 bytes .../golden/inventory_list_golden_test.dart | 89 ++++++++++++++++++ client/test/support/golden_harness.dart | 69 ++++++++++++++ 5 files changed, 158 insertions(+) create mode 100644 client/test/golden/goldens/inventory_list_a.png create mode 100644 client/test/golden/goldens/inventory_list_b.png create mode 100644 client/test/golden/goldens/inventory_list_c.png create mode 100644 client/test/golden/inventory_list_golden_test.dart create mode 100644 client/test/support/golden_harness.dart diff --git a/client/test/golden/goldens/inventory_list_a.png b/client/test/golden/goldens/inventory_list_a.png new file mode 100644 index 0000000000000000000000000000000000000000..f1c0ec173813867652b2fc175a7629df19054bc7 GIT binary patch literal 45883 zcmeFZ2UHYWw=P+1TqITa&PrJ_7|;}JoF#@RYI>9-+tEn3Hueb5_u+*vKaAurk56% zp2@iH=U@J4hS|LPGW6PX-2=Jgoj4p_ZlCV6oL6YQYUgIQ zA~Yx5weLlDG8J7uw=d*o2CL!U_3UD7Ex3yVh&wx^WU^PV{yKqtw^gBYf1UZBV}!8( zIuU(N4E?^3`T?HrUmrm4sn3i4K9PElP5t|XP73Rf-zV2TK^K3YTvGY>V?=**E8_T$czTFAHlPj_4u1EZr?hJs^XRMtBC z zY;1Pzm&ewk9gb%G>~Af3MB2s&B2GH9JNL`ck{Ul)YJD~_58ONQG`N8je!L!+cvwsT zr^TlOH+VJ!e-1%V}F2hnA7g6q9cH@gJA$Ac>|WRgH^qx_Xg z+sDX`N)m`?o`lWQQSY<$Tm@yJ{R!<&R#NrqiK|`JtOl^@O(ePu;e}dF79qv--c8Tj|gA^u6r9 zxjIg9*?H-vqq}SV)b_;5o5~-?C%ZL3$luqCujcNyAW%V`RDu;N&EwUF-(C+2JoRER zK(Dan9XcN3=h|2Z(ZEmAP6)?W4&bj3(SavdG^;1lPZrzOkv^Lpt|ECNLqjpUV~3(u zo7GfWyVF4wLN!U-F?k|nHuL)i1`2bN@BXHlRr0P_Yq*DzO!}*sr$_E{Tcw!Rs0~_I z%n%J+Ps%bth>)onbG=LFUQ%MQ^sPwe?1Q=4hfaSp_f&?qf*j9_P|V}WW62+- z@Ld8X{Y{j;w<^#P^Hl4v&_|E~t*j|$^BaSN)3Cy%|RcB&nlad4-nXtP~|>x~5+kx%qae%@N& z6xnZhI>o_?@TB;QB3}vSQ;Gff@`C<{2zttPeV}p|DTGIw#6V-P+e_a(YOuLH#6Ow) z_pihR=t3t4J|}4#h7Vis|4^(s67^c+0QV68UbZQ#8rl=FKYlOkn%3sUpGO4s)r-!cC?iK70^+y94@aIs&gZvUNx zY0fro&nkg2FL|Q_Z@?D^VpHuwA#$irj98p79>zR^(kRl+orjIy6X<)Rq1-PtqSfLK ziS~VSccO&e)AK2I;y@c8bUK+MG(A+q+9gu%M`#W{$>s4sHqzSVg&@_WQN9}tq_gHJ z12LUS`zN$>Sdd^s94_X&1Q4}iU(9A&GQ>+B{@LXT7g!@0o-=CM{PjrACOY;FtkPd2 zn*^mn*!Y2)5ewqZzS~9?)JhhpQ1b$2T1?f(TwSP;&(hx2@FSu;6Ym2l4Osk)FlIis zKp`wBN7ITAv4j16qg97OSI2wnq?Dzz@wV<<%BUrh?>bc1KTq)5@#kJ^N^~XzO$lpz z|*HY&!IP3+DnpR4H4zhL+%UDp-YehCHj~h zpF%qze8A_M;%I3nQfQD5FbE>WFy>nrW~1qrZSKXykfiAizhG8LgwIBSf8?sxJKM|7 z>cLph`%fvd+3Vk?QvLm-7GOVmQM$=ow@XLgZ$c2a!r#_t!K^_*sU2Y8Lzb&SsJSwB z-MMf)OA>;lMp|`5c7&Yn0_K}l#Fs6HzN(N6I9)*gZwq{L&&?tg^zfSL`NMrXPxhr0 zLmSuJgrUN{D_v~*1dcVoU0zyPL*bCAV{`1JdOtukz{Q?9M3xTcO&+9Qx3#HV1*p< z(rma;x0W+UyhUjM8NTE_GKFKOUd-0Hn7Z8SL%?H{u;wresJV8=KE-k<=JEIUZ`>c2 zW;+jcKh;$*&10I7$LP3PdT*SY)m5;4qm8&O%x=Q@?0=lEJ2nEGEi9Z62c%g#r%#l7 z^1qM|#jJblU#!Y%cPCVd$hq#3Kn|=mi~CZ^K{RxaXkCX5Wb>a^60w4HON<5 zzX@!1C^)ryDfw%)UELBCb3D>iWO|tN3<3Q@(v__ZW;eU_8q&!&8sm ztg8N3@%;aPP3yWy2|*Sm1@Gnw+UBoH++(7ZFuh@_y{l%<9N-VEC>t1YQSvBjGQ(m5 z9%NL3;b=6IBw_uG{}≈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 ar2Wo}r~F!*^4Z&?Tt2UUF5`QXAO9bM(0#4| literal 0 HcmV?d00001 diff --git a/client/test/golden/goldens/inventory_list_b.png b/client/test/golden/goldens/inventory_list_b.png new file mode 100644 index 0000000000000000000000000000000000000000..841a781dc480015fa33f3df11bad5b157cdc8c04 GIT binary patch literal 46094 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 qAnXb(I5bDg;Afr@{|8ucTs_kKSb3X$B literal 0 HcmV?d00001 diff --git a/client/test/golden/goldens/inventory_list_c.png b/client/test/golden/goldens/inventory_list_c.png new file mode 100644 index 0000000000000000000000000000000000000000..71fd5edf9c90934134dcd9607d0b2fbfd80efe5c GIT binary patch literal 46330 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⁣0;Ty&0m(>|eW=Zk!)Rq%r;@g|tO)#(6#Qd`Y1MT%R-`RG@D`feG#>*w= z4;V{lXVlza_YjqvKFDmdJ9&oSa?w+vP2-$gUH>Hfz+m5EVq;g^zGk_|s;T^GLd?@} z@%)k6#`v}a29Y0hiRt(6_c+k_&TB-~9@A}`+QN=~L9$30pMGH2u%%LGq~%2yK8^e85Cp$t>c;P*bq>@r$BWDHAjWE42l zawxQFILX0}x(G9gK;7>Pt7aqM=_yj4&a(^$gQ#?I51bZ3M*sp}5?bBZf3E`MVb@C~ zT$JuYJrvs28eB^@@aYyeKmP$4#J)jn{czhszS7D2V%4z5GOuK}+g-H)9 zLE^RM=`y6E;3k4NEtqOq`!IwtRJ9!jdzt}X%U~6#oJ{sJs;3hq6n#k)uL8HASO?;pBW8JxEgD+!;mmvHzaZ}NS zx~AZ^NDS*yr5I?n4TCGSk_8TVZ4;1PdWLmo)6E73Gi9V*8ljnwC={~;KIb<#;iRKy zS2{a6aA9F#j1$EZpqh{9VXoUM5y}yL8dm(>Lt)BGYx|!j+}aK zcXvt8RRl!|nn|*TSE%R|kyCnzIb{2oxx3+4(}xdCDG9`o%b%zRr;HmdJr4MnJEpKA vgCPh;UWZ;e_gA#ILm9*Er literal 0 HcmV?d00001 diff --git a/client/test/golden/inventory_list_golden_test.dart b/client/test/golden/inventory_list_golden_test.dart new file mode 100644 index 0000000..29d5f49 --- /dev/null +++ b/client/test/golden/inventory_list_golden_test.dart @@ -0,0 +1,89 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:jiu_client/core/models/page_result.dart'; +import 'package:jiu_client/core/auth/auth_state.dart'; +import 'package:jiu_client/models/inventory.dart'; +import 'package:jiu_client/models/product_option.dart'; +import 'package:jiu_client/providers/inventory_provider.dart'; +import 'package:jiu_client/providers/product_option_provider.dart'; +import 'package:jiu_client/screens/inventory/inventory_list_screen.dart'; + +import '../support/golden_harness.dart'; + +/// design-distill 阶段4:库存列表**整屏** golden × 三主题(回归闸)。 +/// 保真目检:另跑 shoot-prototype 截 screens/inventory.html,再用 montage.mjs +/// 与 goldens/inventory_list_.png 并排比对。 +/// 更新基准:flutter test --update-goldens test/golden/inventory_list_golden_test.dart + +const _items = [ + Inventory( + id: 1, productId: 1, quantity: 128, productCode: 'MT-FT-500', + productName: '茅台 飞天 53°', series: '飞天', spec: '500ml×6', unit: '件', + warehouseName: '主仓', unitPrice: 2680, productionDate: '2024-07-11', + batchNo: 'PZ240711', supplierName: '贵州茅台经销', minStock: 10, + createdAt: '2026-06-14', + ), + Inventory( + id: 2, productId: 2, quantity: 8, productCode: 'JNC-SJ-500', + productName: '剑南春 水晶剑', series: '水晶剑', spec: '500ml×6', unit: '件', + warehouseName: '主仓', unitPrice: 438, productionDate: '2023-11-15', + batchNo: 'PZ231115', supplierName: '绵竹剑南春', minStock: 10, + createdAt: '2026-06-12', + ), + Inventory( + id: 3, productId: 3, quantity: 0, productCode: 'FJ-QH20-500', + productName: '汾酒 青花 20', series: '青花20', spec: '500ml×6', unit: '件', + warehouseName: '主仓', unitPrice: 420, productionDate: '2024-01-12', + batchNo: 'PZ240112', supplierName: '山西杏花村', minStock: 10, + createdAt: '2026-06-03', + ), +]; + +class _FakeInvNotifier extends InventoryListNotifier { + @override + Future> build() async => + const PageResult(data: _items, total: 3, page: 1, pageSize: 20); + @override + void setPage(int page) {} + @override + void setPageSize(int pageSize) {} + @override + void setWarehouseId(int? id) {} + @override + void setKeyword(String keyword) {} + @override + void setSeries(List series) {} + @override + void setSpec(List spec) {} + @override + void reload() {} +} + +class _FakeSeriesNotifier extends ProductSeriesListNotifier { + @override + Future> build() async => const []; +} + +class _FakeSpecNotifier extends ProductSpecListNotifier { + @override + Future> build() async => const []; +} + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + SharedPreferences.setMockInitialValues({}); + + goldenAcrossThemes( + 'inventory list 整屏', + goldenPrefix: 'inventory_list', + child: () => const Scaffold(body: InventoryListScreen()), + overrides: () => [ + inventoryListProvider.overrideWith(() => _FakeInvNotifier()), + productSeriesListProvider.overrideWith(() => _FakeSeriesNotifier()), + productSpecListProvider.overrideWith(() => _FakeSpecNotifier()), + isReadonlyProvider.overrideWithValue(false), + ], + logical: const Size(1280, 900), + ); +} diff --git a/client/test/support/golden_harness.dart b/client/test/support/golden_harness.dart new file mode 100644 index 0000000..5b7c748 --- /dev/null +++ b/client/test/support/golden_harness.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:jiu_client/core/theme/themes.dart'; + +/// design-distill 阶段4(Flutter 端)可复用 golden 骨架。 +/// 在指定主题 / viewport 下渲染 [child](含 provider 覆盖),比对/更新 golden。 +/// +/// 验收分两类闸(见 ~/.claude/skills/design-distill/references/flutter-golden.md): +/// - 保真:原型基准 vs 本 golden 用 montage.mjs 人工目检(跨渲染器,不跑严格 diff)。 +/// - 回归:本 golden 多主题入库,CI `flutter test` 同渲染器自比抓串色/漏 token。 +/// +/// 更新基准:flutter test --update-goldens test/golden/_golden_test.dart +/// +/// 坑(详见 reference):viewport 逻辑尺寸 = physical ÷ dpr(已按 logical*dpr 设好); +/// 高度给足防 RenderFlex 溢出;测试无中文字体 → CJK 显示豆腐块属正常。 +Future pumpGolden( + WidgetTester tester, { + required Widget child, + required String theme, + required String goldenName, + List overrides = const [], + Size logical = const Size(1280, 900), + double dpr = 2.0, +}) async { + tester.view.physicalSize = Size(logical.width * dpr, logical.height * dpr); + tester.view.devicePixelRatio = dpr; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + + await tester.pumpWidget(ProviderScope( + overrides: overrides, + child: MaterialApp( + debugShowCheckedModeBanner: false, + theme: buildTheme(theme), + home: child, + ), + )); + await tester.pumpAndSettle(); + + await expectLater( + find.byType(MaterialApp), + matchesGoldenFile('goldens/$goldenName.png'), + ); +} + +/// 跑「同一 child × A/B/C 三主题」的 golden 组(回归闸常用)。 +void goldenAcrossThemes( + String description, { + required Widget Function() child, + required String goldenPrefix, + List Function()? overrides, + Size logical = const Size(1280, 900), + double dpr = 2.0, +}) { + for (final theme in const ['a', 'b', 'c']) { + testWidgets('$description · theme $theme', (tester) async { + await pumpGolden( + tester, + child: child(), + theme: theme, + goldenName: '${goldenPrefix}_$theme', + overrides: overrides?.call() ?? const [], + logical: logical, + dpr: dpr, + ); + }); + } +}