/** @vitest-environment jsdom */ import { act, cleanup, render, screen } from '@testing-library/react'; import { afterEach, describe, expect, it } from 'vitest'; import { MaintenanceNotice } from '../src/components/modal/MaintenanceNotice'; import { CLIENT_MAINTENANCE_EVENT, ClientAuthRequestError, emitClientMaintenanceNotice, } from '../src/services/clientApi'; afterEach(() => cleanup()); describe('客户端维护大弹窗', () => { it('收到维护事件时统一展示大弹窗', () => { render(); act(() => { window.dispatchEvent( new CustomEvent(CLIENT_MAINTENANCE_EVENT, { detail: { code: 'MAINTENANCE', status: 503 }, }), ); }); expect(screen.getByRole('dialog', { name: '系统维护中' })).toBeTruthy(); expect( screen.getByText('服务正在维护,当前操作暂时无法完成。请稍后再试。'), ).toBeTruthy(); expect(screen.getByRole('button', { name: '我知道了' })).toBeTruthy(); }); it('普通业务错误不会上报维护事件', () => { const received: Event[] = []; const handler = (event: Event) => received.push(event); window.addEventListener(CLIENT_MAINTENANCE_EVENT, handler); emitClientMaintenanceNotice( new ClientAuthRequestError('创建平台游戏失败', { status: 500 }), ); expect(received).toHaveLength(0); window.removeEventListener(CLIENT_MAINTENANCE_EVENT, handler); }); });