Flutter: Get testo PopupMenuItem di un PopupMenuButton in unit test

voti
0

Ho un PaginatedDataTable che ha un DataCell con un PopupMenuButton. WidgetTester può trovare ogni DataCell nessun problema, ma i cant sembrano fare riferimento elementi del PopupMenuButton cercare di selezionare uno.

Come posso ottenere un testo di PopupMenuItem PopupMenuButton nel test di unità ? Sto usando await tester.pump();correttamente per consentire di apparire il menu?

Ecco come sto facendo ora:

...
expect(find.byIcon(Icons.more_horiz).first, findsOneWidget); // works!

await tester.tap(find.byIcon(Icons.more_horiz).first);
await tester.pump();

var byType = find.text('Quote');
expect(byType, findsOneWidget); // fails!

Che non riesce con

zero widgets with text Quote (ignoring offstage widgets)...

E qui è il markup DataCell

...
new DataCell(...),
new DataCell(new PopupMenuButton<quickActions>(
      icon: new Icon(Icons.more_horiz),
      onSelected: (quickActions action) {
        _selectContextAction(action);
      },
      itemBuilder: (BuildContext context) => <PopupMenuEntry<quickActions>>[
            new PopupMenuItem<quickActions>(
              value: quickActions.edit,
              child: new Text('Edit'),
            ),
            new PopupMenuItem<quickActions>(
              value: quickActions.remove,
              child: new Text('Remove'),
            ),
            new PopupMenuItem<quickActions>(
              value: quickActions.reschedule,
              child: new Text('Re-schedule'),
            ),
            new PopupMenuItem<quickActions>(
              value: quickActions.bid,
              child: new Text('Quote'),
            ),
          ],
    ))
È pubblicato 28/03/2018 alle 18:10
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

So che questa è una vecchia questione, ma mi sono trovato in questo stesso problema e ho risolto.

Per coloro che hanno questo stesso problema, sto inviando la mia risposta. La mia prova è un po 'diversa dalla vostra.

Qual è Pump

Innesca un fotogramma dopo quantità durata del tempo.

Questo rende la legge quadro, come se la domanda era janked (fotogrammi mancanti) per importo periodo di tempo, e poi ha ricevuto un segnale di v-sync per dipingere l'applicazione.

Qual è PumpAndSettle

chiama ripetutamente la pompa con la durata data fino a quando non ci sono più alcun frame programmati. Ciò richiederà pompa almeno una volta, anche se non sono previste frame quando viene chiamata la funzione, per irrigare eventuali microtasks pendenti che possono programmare stessi una cornice.

//My Code
//await tester.tap(find.byIcon(Icons.text_fields));
//await tester.pumpAndSettle();

//await tester.tap(find.text(expectedFontSize + ' px'));
//expect(fontSize, expectedFontSize);

//call again if you want to do testing again or something again 
//await tester.pumpAndSettle();

 var mainButton = find.byIcon(Icons.more_horiz); 
 expect(mainButton, findsOneWidget);

 await tester.tap(mainButton);
 await tester.pumpAndSettle();

 var childButton = find.text('Quote');
 expect(childButton , findsOneWidget); //

Per me il codice funzionava solo dopo aver chiamato PumpAndSettle Metodo

Risposto il 22/07/2018 a 09:49
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more