智慧水务管理系统 - 精河县供水工程综合管理平台

login_page_test.dart 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_test/flutter_test.dart';
  3. import 'package:provider/provider.dart';
  4. import 'package:water_management_app/features/auth/pages/login_page.dart';
  5. import 'package:water_management_app/features/auth/services/auth_provider.dart';
  6. /// LoginPage widget 测试(对应 Issue #79 登录功能)。
  7. ///
  8. /// 覆盖:页面渲染、表单校验、密码可见切换、记住用户名复选框。
  9. void main() {
  10. // 轻量 AuthProvider 替身:避免触发 TokenService 的 SharedPreferences 依赖
  11. AuthProvider makeAuth() => AuthProvider();
  12. Widget makeApp({required AuthProvider auth}) {
  13. return ChangeNotifierProvider(
  14. create: (_) => auth,
  15. child: const MaterialApp(home: LoginPage()),
  16. );
  17. }
  18. testWidgets('登录页渲染标题与输入框', (tester) async {
  19. await tester.pumpWidget(makeApp(auth: makeAuth()));
  20. expect(find.text('供水管理系统'), findsOneWidget);
  21. expect(find.text('供水 · 巡检 · 营收'), findsOneWidget);
  22. expect(find.widgetWithText(TextFormField, '请输入用户名'), findsOneWidget);
  23. expect(find.text('登 录'), findsOneWidget);
  24. });
  25. testWidgets('空用户名提交时不通过校验', (tester) async {
  26. await tester.pumpWidget(makeApp(auth: makeAuth()));
  27. await tester.tap(find.text('登 录'));
  28. await tester.pump();
  29. expect(find.text('请输入用户名'), findsOneWidget);
  30. });
  31. testWidgets('密码短于6位显示校验错误', (tester) async {
  32. await tester.pumpWidget(makeApp(auth: makeAuth()));
  33. await tester.enterText(find.byType(TextFormField).first, 'admin');
  34. await tester.enterText(find.byType(TextFormField).last, '123');
  35. await tester.tap(find.text('登 录'));
  36. await tester.pump();
  37. expect(find.text('密码长度不能少于6位'), findsOneWidget);
  38. });
  39. testWidgets('点击密码可见图标切换 obscureText', (tester) async {
  40. await tester.pumpWidget(makeApp(auth: makeAuth()));
  41. // 初始密码隐藏
  42. TextFormField pwdField = tester.widget(find.byType(TextFormField).last);
  43. expect(pwdField.obscureText, isTrue);
  44. await tester.tap(find.byIcon(Icons.visibility_off));
  45. await tester.pump();
  46. pwdField = tester.widget(find.byType(TextFormField).last);
  47. expect(pwdField.obscureText, isFalse);
  48. // 再次点击恢复隐藏
  49. await tester.tap(find.byIcon(Icons.visibility));
  50. await tester.pump();
  51. pwdField = tester.widget(find.byType(TextFormField).last);
  52. expect(pwdField.obscureText, isTrue);
  53. });
  54. testWidgets('记住用户名复选框可切换', (tester) async {
  55. await tester.pumpWidget(makeApp(auth: makeAuth()));
  56. expect(find.text('记住用户名'), findsOneWidget);
  57. Checkbox checkbox = tester.widget(find.byType(Checkbox));
  58. expect(checkbox.value, isTrue); // 默认勾选
  59. await tester.tap(find.text('记住用户名'));
  60. await tester.pump();
  61. checkbox = tester.widget(find.byType(Checkbox));
  62. expect(checkbox.value, isFalse);
  63. });
  64. }