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

Minha versão do teste When tap Deposit should update earned to 10

De todas as funções disponiveis no find.* o que eu mais gostei foi o byWidgetPredicate, e me desafiei a fazer uma versão mais assertiva para encontrar o widget de ação de deposito, então fiz assim:

testWidgets('When tap Deposit should update earned to 10', (tester) async {
      //arrange
      await _buildWidget(tester);
      final cardTitle = 'Deposit';
      final earnLabel = find.text('Earned');
      final depositButton = find.byWidgetPredicate(
        (widget) =>
            widget is InkWell &&
            widget.child is BoxCard &&
            (widget.child as BoxCard).boxCardBody is Activity &&
            ((widget.child as BoxCard).boxCardBody as Activity).cardTitle ==
                cardTitle,
      );
      final updatedExpectedEarnValue = find.text("\$10.0");

      //act
      await tester.tap(depositButton);
      await tester.tap(earnLabel);
      await tester.pump();
      //assert
      expect(updatedExpectedEarnValue, findsOneWidget);
    });

e para evitar repetições (DRY), chamo a função await _buildWidget(tester); sempre no começo de cada teste:

Future<void> _buildWidget(WidgetTester tester) async {
  await tester.pumpWidget(MaterialApp(home: BankInherited(child: Home())));
}

void main() {
    //restante dos codigos de testes
}

provavelmente estou já adiantando os bois na frente da carroça (acho que é assim o ditado) e mais pra frente será apresentado uma proposta melhor, de qualquer modo achei interessante compartilhar aqui!

1 resposta
solução!

Olá, Samuel, como vai?

Sua abordagem utilizando byWidgetPredicate ficou bem interessante. Esse tipo de uso mais preciso do find é ótimo quando queremos garantir que estamos acessando exatamente o widget certo, especialmente em árvores mais complexas de widgets. O fórum é um espaço muito rico justamente por ter esse tipo de troca entre quem está estudando e explorando diferentes formas de resolver os desafios.

Valeu por compartilhar sua solução no fórum, Samuel. Continue participando e trocando ideias por aqui, o espaço está sempre aberto.

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