Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Código do Desafio - Aula 03 - Atividade 04

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);
1 resposta
solução!

Oii! Tudo bem?

Obrigada por compartilhar.

Testes de integração e de widgets são fundamentais pra garantir que o fluxo da aplicação funcione conforme o esperado, especialmente em interações que envolvem navegação e manipulação de estado.

Teste do Widget IconPicker:

Seu teste está correto ao simular a abertura do AlertDialog. Uma boa prática em testes de widget é verificar não apenas se o componente aparece, mas se ele interage corretamente com o usuário.

  • Ponto positivo: O uso do pumpAndSettle() é fundamental aqui para aguardar a animação de abertura do diálogo terminar antes de buscar os elementos.
  • Sugestão: No expect, você passou uma lista de Finders. Embora funcione, o padrão mais comum para facilitar a leitura é separar em linhas distintas:
expect(txtChooseIcon, findsOneWidget);
expect(iconFavoriteFinder, findsOneWidget);

Teste do Botão Sair (Drawer):

Testar o encerramento do aplicativo é sempre um ponto delicado, pois, como você notou, o teste perde a conexão com a instância da aplicação.

  • Observação: Em ambientes de CI/CD (integração contínua), testes que fecham o processo podem causar erros no relatório final. Sua abordagem de deixar o tap comentado com a explicação foi uma ótima saída didática para o exercício.

Teste de Exclusão com Drag:

O uso do método drag() foi aplicado com sucesso. No Flutter, o componente Dismissible é muito comum para essa funcionalidade.

  • Dica técnica: No comando tester.drag(txtNewClienteFinder, const Offset(500, 0)), o valor 500 no eixo X indica um movimento para a direita. Tenha certeza de que o widget na sua aplicação está configurado para aceitar o deslize nessa direção (ou mude para -500 se for para a esquerda).

O seu progresso é nítido e a organização do código está excelente. Continue explorando essas ferramentas de teste, pois elas evitam que erros antigos voltem a aparecer no futuro.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!