Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como eu faço o tester.pumpWidget de um widget que depende de Providers

como eu faço para sanar as dependências de um Widget que depende de states implementados com BLOC. Se pegarmos o projeto final do curso de i18N temos 3 BLOCS de dependência para que a minha tela de Dashboard funcione.

O código abaixo esta todo acoplado para que fique fácil entender minha duvida.

MaterialApp(
      theme: bytebankTheme,
      home: BlocProvider<CurrentLocaleCubit>(    //Primeiro BLOC
        create: (context) => CurrentLocaleCubit(),
        child: BlocProvider(
          create: (_) => NameCubit(name: 'Guess'), //Segundo BLOC
          child: BlocProvider<I18NMessagesCubit>(   //Terceiro BLOC
            create: (BuildContext context) {
              final cubit = I18NMessagesCubit("dashboard");
              cubit.reload(I18NWebClient("dashboard"));
              return cubit;
            },
            child: BlocBuilder<I18NMessagesCubit, I18NMessagesState>(
              builder: (context, state) {
                if (state is InitI18NMessagesState || state is LoadingI18NMessagesState) {
                  return Scaffold(body: LoadingCenteredMessage(message: 'Loading'));
                }
                if (state is LoadedI18NMessagesState) {
                  final messages = state.messages;
//-----------------------------------------------------------------------------------------
                 //Widget a ser testado para ver se contem uma Imagem
return DashboardView(DashboardViewLazyI18N(messages));  
//------------------------------------------------------------------------------------------

                }
                return Scaffold(body: CenteredMessage("Erro buscando mensagens da tela"));
              },
            ),
          ),
        ),
      ),
    );
2 respostas

Bom dia Hillan, boa sexta, não?

Então, fico muito feliz de ver que você está tão avançado no Flutter!

Então, o curso de Tests foi feito pensando antes da implementação do Bloc.

Mas não tema, tenho a solução! Fazer testes em Bloc não é muito difícil, mas é um novo desafio para você, preparado?

Existe um pacote chamado: Bloc Test

Da uma lida nesse tutorial do Kanan Yusubov

solução!

Boa noite kako, eu li o tutorial do pacote BlocTest e ele é bem útil quando se quer mudar os estados do bloc e testar seu valores, depois vou usar com certeza, mas não era bem a solução para rodar o tester.pumpWidget, mas acabei achando um jeito de fazer a chamada do widget que depende dos estados do Bloc, vou compartilhar aqui com o povo. Não esta muito bonito mas funciona rsrs.

void main() {
  testWidgets('Should display the main image when the Dashboard is opended',
      (WidgetTester tester) async {
    await tester.pumpWidget(MaterialApp(
      home: MultiBlocProvider(
          providers: [
            BlocProvider<CurrentLocaleCubit>(
              create: (BuildContext contextCL) => CurrentLocaleCubit(),
            ),
            BlocProvider<NameCubit>(
              create: (BuildContext contextNC) => NameCubit(name: 'Guess'),
            ),
            BlocProvider<I18NMessagesCubit>(
              create: (BuildContext contextI18N) => I18NMessagesCubit("dashboard"),
            ),
          ],
          child: DashboardView(DashboardViewLazyI18N(I18NMessages({   
            "transfer": "Transfer",                                                                          
            "transaction_feed": "Transaction Feed",
            "change_name": "Change Name"
// só não consegui ainda pegar esses dados de forma dinâmica do I18NMessagesState  
          })))),
    ));
    final mainImage = find.byType(Image);
    expect(mainImage, findsOneWidget);
  });
}