修复(画布顶栏): 明细弹层优先展示钱包读取失败文案
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m55s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m44s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m30s
Project CI / Backend tests (pull_request) Successful in 9m6s
Project CI / Frontend tests (pull_request) Successful in 3m31s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m45s
Project CI / Native shell tests (pull_request) Successful in 6m53s
Project CI / Repository checks (pull_request) Successful in 5m18s

- walletDetailsError 改为 mudPointBalanceError || rechargeError,避免充值弹层原始错误串(network down)泄漏到顶栏明细
- 单测补齐 AuthGate 挂载时的那次余额读取,并在 hover 后等待错误文案提交(弹层先渲染 loading 态)
- 两个原本失败的用例(ImageCanvasEditorView / createProfileWalletStore)恢复通过
This commit is contained in:
2026-10-06 10:23:21 +08:00
parent a38407344d
commit 3ca01351cb
2 changed files with 12 additions and 2 deletions
@@ -708,6 +708,12 @@ describe('ImageCanvasEditorView', () => {
getPlatformProfileRechargeCenterMock.mockRejectedValue(
new Error('network down'),
);
// 真实链路里 AuthGate 挂载 usePlatformWalletLifecycle 时会触发首次余额读取;本用例独立渲染
// ImageCanvasEditorView,需手动补上这一步。否则 store 停在 idle,入口把它当成 loading 而
// 跳过 hover 触发的明细请求,弹层会永远停在「余额读取中」。
await act(async () => {
await usePlatformWalletStore.getState().onWalletBalanceMayHaveChanged();
});
render(
<AuthUiContext.Provider
value={createAuthValue({
@@ -736,7 +742,9 @@ describe('ImageCanvasEditorView', () => {
const details = await screen.findByRole('dialog', {
name: '会员与泥点账户详情',
});
expect(within(details).getByText('泥点明细读取失败')).toBeTruthy();
// 详情弹层打开即渲染 loading 态,读取失败的 rejection 在下一个微任务才提交;
// 必须等待错误文案出现,否则同步 getByText 会稳定命中的是「余额读取中」。
expect(await within(details).findByText('泥点明细读取失败')).toBeTruthy();
expect(within(details).queryByText('充值中心响应缺少泥点余额')).toBeNull();
expect(within(details).queryByText('永久泥点')).toBeNull();
expect(within(details).queryByText('每日免费泥点')).toBeNull();
@@ -2527,7 +2527,9 @@ export function ImageCanvasEditorView({
walletBreakdown: mudPointBalance,
isWalletBalanceLoading,
isWalletDetailsLoading: isLoadingRechargeCenter,
walletDetailsError: rechargeError || mudPointBalanceError || null,
// 明细弹层展示的正是钱包 store 的 breakdown;其读取失败文案优先于充值弹层的原始报错,
// 避免把「读详情」的原始错误串(如 network down)泄漏到顶栏明细里。
walletDetailsError: mudPointBalanceError || rechargeError || null,
currentUser: authUi?.user,
assetExportStatus,
isExportingAssets,