Sobre os desafios propostos, seguem sugestões de solução:
Teste do Widget IconPicker:
testWidgets(
"Open alert dialog of icon picker, that contais an icon of a heart (favorite) and text 'Escolha um ícone'",
(tester) async {
await tester.pumpWidget(MaterialApp(
home: Builder(
builder: (context) => TextButton(
onPressed: () => showIconPicker(context: context),
child: const Text("Selecionar icone")),
),
));
Finder menuClientsTypesFinder = find.text('Selecionar icone');
await tester.tap(menuClientsTypesFinder);
await tester.pumpAndSettle();
expect(find.byType(AlertDialog), findsOneWidget);
final Finder txtChooseIcon = find.text('Escolha um ícone');
final Finder iconFavoriteFinder = find.byIcon(Icons.favorite);
expect([txtChooseIcon, iconFavoriteFinder],
[findsOneWidget, findsOneWidget]);
},
);
Para testar o botão Sair, localizado no menu (Drawer):
testWidgets(
"Hamburger menu should have text 'Sair' and on tap, close app.",
(tester) async {
await tester.pumpWidget(const MaterialApp(
home: HamburgerMenu(),
));
expect(find.text('Sair'), findsOneWidget);
//await tester.tap(find.text("Sair")); // Descomentar somente para testar o funcionamento, contudo invalida o teste por encerrar o app.
},
);
Por fim, o teste de exclusão do novo cliente cadastrado:
//Verifica se está na tela de Clientes cadastrados.
expect(find.text("Clientes"), findsOneWidget);
//Busca o cliente cadastrado pelo nome
Finder txtNewClienteFinder = find.textContaining(clientName);
expect(txtNewClienteFinder, findsOneWidget);
//Realiza a exclusão do cliente
await tester.drag(txtNewClienteFinder, const Offset(500, 0));
await tester.pumpAndSettle();
//Verifica a exclusão
txtNewClienteFinder = find.textContaining(clientName);
expect(txtNewClienteFinder, findsNothing);