2
respostas

[Dúvida] Dúvida no teste do showIconPicker

Fiquei com dúvida para iniciar o teste.

showIconPicker() é uma função que abre um showDialog e retorna um Future<IconData?>.

Então não consegui entender se preciso fazer um tester.pumpWidget() para executar tester.tap() e outras ações no showDialog.

Tudo que tentei fazer pra colocar a função no teste fracassou.

showIconPicker() também recebe o context, aí não sei como passá-lo para a função a partir do teste. Poderiam me ajudar?

2 respostas

Resolvi assim: Obtive o context a partir da widget Builder(). Porém tive que preparar a parte da tela semelhante ao aplicativo com um ElevatedButton só para chamar a função. Acredito que não era bem esse o objetivo da atividade.

void main() {
  testWidgets('Icon Picker Test', (widgetTester) async {
    IconData? icon;

    await widgetTester.pumpWidget(
      MaterialApp(
        home: Builder(builder: (context) {
          return ElevatedButton(
            onPressed: () async {
              icon = await showIconPicker(context: context);
            },
            child: const Text('Selecionar icone'),
          );
        }),
      ),
    );

    await widgetTester.pumpAndSettle();
    await widgetTester.tap(find.text('Selecionar icone'));
    await widgetTester.pumpAndSettle();
    await widgetTester.tap(find.byIcon(Icons.credit_card));
    await widgetTester.pumpAndSettle();
    expect(icon, Icons.credit_card);
  });
}

Gostaria de ver uma solução que testasse apenas a função sem a dependência de ter que criar um ElevatedButton no teste.

Olá, Rafael.

Tudo bem?

A abordagem que você escolheu é válida e eficaz para testar a função showIconPicker(). Você utilizou um ElevatedButton dentro de um Builder para criar uma interação com a função que você deseja testar. Isso funciona bem e é uma maneira legítima de testar a função em um contexto mais próximo do real.

O importante é garantir que suas funções estejam sendo testadas de forma confiável e abrangente.

Espero ter ajudado. Qualquer dúvida manda aqui de novo.