import 'package:flutter_test/flutter_test.dart'; import 'package:get/get.dart'; import 'package:eaimar/data/services/id_verify_service.dart'; /// 守住「重新登录后显示未认证」那个 bug 的两个成因: /// 1. 未登录时不该去打接口(打了只会拿到 NoLogin,还把 loaded 留在 false); /// 2. 登出必须清空状态,否则下一个账号会继承上一个账号的已认证信息。 void main() { setUp(() { Get.testMode = true; Get.put(IdVerifyService()); }); tearDown(Get.reset); test('未登录时 refresh 不改变状态(不会误标记为已加载)', () async { final svc = IdVerifyService.to; // 测试环境下 User 单例未初始化 ⇒ isLoggedIn()==false await svc.refresh(); expect(svc.loaded.value, isFalse, reason: '未登录不该把状态标记成已加载'); expect(svc.verified.value, isFalse); }); test('ensureLoaded 在未登录时同样安全', () async { final svc = IdVerifyService.to; await svc.ensureLoaded(); expect(svc.loaded.value, isFalse); }); test('clear 清空全部字段——换账号不能继承上一个账号的实名信息', () { final svc = IdVerifyService.to; svc.verified.value = true; svc.realname.value = '张三'; svc.idcardMask.value = '4304**********8812'; svc.verifyTime.value = 1700000000; svc.verifiedGender.value = 1; svc.loaded.value = true; svc.clear(); expect(svc.verified.value, isFalse); expect(svc.realname.value, isEmpty); expect(svc.idcardMask.value, isEmpty); expect(svc.verifyTime.value, 0); expect(svc.verifiedGender.value, 0); expect(svc.loaded.value, isFalse, reason: 'loaded 也要清,否则不会重新拉新账号的状态'); }); test('已加载后 ensureLoaded 不重复请求', () async { final svc = IdVerifyService.to; svc.loaded.value = true; await svc.ensureLoaded(); // 不该抛,也不该改状态 expect(svc.loaded.value, isTrue); }); }