es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer esto en Flutter Testing?

Soy nuevo en las pruebas de Flutter y esperaba que me pudieras ayudar. Tengo una clase llamada AddShimmer que se ve así ->

AddShimmer(
  child: ListTile(
    title: buildLoadingAnimation(context),
  ),
),

Ahora, estoy intentando escribir una prueba de Flutter solo para verificar si se está pasando un widget secundario a la clase AddShimmer. Para hacer eso, estoy escribiendo algo como esto ->

testWidgets('Shimmer has a child widget', (WidgetTester tester) async {
  const childWidget = ListTile(
    title: Text('Loading'),
  );
  await tester.pumpWidget(
    const AddShimmer(child: childWidget)
  );
  expect(find.byWidget(childWidget), findsOneWidget);
});

Mientras ejecuto la prueba, obtengo una excepción que dice ->

The following assertion was thrown building ListTile(dirty):
No Directionality widget found.
ListTile widgets require a Directionality widget ancestor.
The specific widget that could not find a Directionality ancestor was:
  ListTile

¿Qué significa esto y cómo puedo probarlo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La excepción “No se encontró un widget de dirección” signfica que el widget de ListTile requiere un widget ancestro de Directionality. El widget Directionality proporciona información sobre la dirección del texto a sus descendientes. Como solo estás probando el widget AddShimmer, necesitas agregar un widget MaterialApp como ancestro de tu widget para proporcionar la información de dirección necesaria.

    Aquí está el código modificado:

    testWidgets('Shimmer tiene un widget hijo', (WidgetTester tester) async {
      const childWidget = ListTile(
        title: Text('Cargando'),
      );
      await tester.pumpWidget(
        MaterialApp(
          home: AddShimmer(child: childWidget),
        ),
      );
      expect(find.byWidget(childWidget), findsOneWidget);
    });
    

    Al agregar el widget MaterialApp como ancestro, estás proporcionando la información de dirección necesaria al widget ListTile, y la prueba debería aprobar sin excepciones.

Comments are closed.