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!