| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import { TestBed } from '@angular/core/testing';
- import { AlertService } from './alert.service';
- /**
- * 全局异常提示(2026-11-10 用户裁决)。
- *
- * 核心约束:**不会自动消失**,只能由用户手动关闭。
- */
- describe('AlertService', () => {
- let svc: AlertService;
- beforeEach(() => {
- TestBed.resetTestingModule();
- TestBed.configureTestingModule({ providers: [AlertService] });
- svc = TestBed.inject(AlertService);
- });
- it('show 后进入列表', () => {
- svc.show('请求异常', '细节');
- expect(svc.alerts().length).toBe(1);
- expect(svc.alerts()[0].title).toBe('请求异常');
- expect(svc.alerts()[0].detail).toBe('细节');
- });
- it('🔴 不会自动消失(等一段时间仍在)', async () => {
- svc.show('请求异常');
- await new Promise((r) => setTimeout(r, 300));
- expect(svc.alerts().length).toBe(1);
- });
- it('手动 dismiss 才移除', () => {
- svc.show('请求异常');
- const id = svc.alerts()[0].id;
- svc.dismiss(id);
- expect(svc.alerts()).toEqual([]);
- });
- it('同一标题不重复弹(避免每秒 tick 刷屏)', () => {
- svc.show('请求异常');
- svc.show('请求异常');
- svc.show('请求异常');
- expect(svc.alerts().length).toBe(1);
- });
- it('不同标题可以并存', () => {
- svc.show('A');
- svc.show('B');
- expect(svc.alerts().length).toBe(2);
- });
- it('clear 清空全部', () => {
- svc.show('A');
- svc.show('B');
- svc.clear();
- expect(svc.alerts()).toEqual([]);
- });
- });
- /*
- * 状态型提示(2026-11-10 用户反馈:不能只弹一次)。
- *
- * 约束:当前会话只要存在超时,就一直显示;条件消失后自动撤掉;
- * 用户手动关掉后不马上重弹,但条件重新出现时要能再提示。
- */
- describe('AlertService · syncState', () => {
- let svc: AlertService;
- beforeEach(() => {
- TestBed.resetTestingModule();
- TestBed.configureTestingModule({ providers: [AlertService] });
- svc = TestBed.inject(AlertService);
- });
- it('条件成立 → 显示', () => {
- svc.syncState('容器长时间未响应', true, '1 条超时');
- expect(svc.alerts().length).toBe(1);
- expect(svc.alerts()[0].detail).toBe('1 条超时');
- });
- it('🔴 条件持续成立 → 一直显示(不会被去重逻辑吞掉)', () => {
- svc.syncState('容器长时间未响应', true, '1 条超时');
- svc.syncState('容器长时间未响应', true, '2 条超时');
- expect(svc.alerts().length).toBe(1);
- expect(svc.alerts()[0].detail).toBe('2 条超时'); // 计数实时更新
- });
- it('条件消失 → 自动撤掉', () => {
- svc.syncState('容器长时间未响应', true);
- svc.syncState('容器长时间未响应', false);
- expect(svc.alerts()).toEqual([]);
- });
- it('🔴 用户手动关掉后不马上重弹(避免"关不掉")', () => {
- svc.syncState('容器长时间未响应', true);
- svc.dismiss(svc.alerts()[0].id);
- svc.syncState('容器长时间未响应', true);
- expect(svc.alerts()).toEqual([]);
- });
- it('🔴 条件消失再出现后,重新提示(问题二次发生要能看见)', () => {
- svc.syncState('容器长时间未响应', true);
- svc.dismiss(svc.alerts()[0].id);
- svc.syncState('容器长时间未响应', false); // 问题消失,解除锁定
- svc.syncState('容器长时间未响应', true); // 再次超时
- expect(svc.alerts().length).toBe(1);
- });
- });
|