Как открыть ящик в тесте флаттера - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь протестировать пользовательский ящик, но мне трудно открыть его в тесте, для начала попробовал следующее, и даже этот тест не прошел.Ошибка: Bad state: no element.

void main() {
  testWidgets('my drawer test', (WidgetTester tester) async {
    final displayName = "displayName";
    var drawKey = UniqueKey();
    await tester.pumpWidget(MaterialApp(
        home: Scaffold(
      drawer: Drawer(key: drawKey, child: Text(displayName),),
    )));
    await tester.tap(find.byKey(drawKey));
    expect(find.text(displayName), findsOneWidget);
  });
}

1 Ответ

0 голосов
/ 14 ноября 2018

Вы звоните tap() на Drawer, но он не виден, поскольку скрыт слева. Из-за этого Finder не находит никаких элементов, а tap() неудачно. И даже если Finder обнаружил Drawer, постукивание по самой Drawer все равно не откроет его.

Один из способов, и, на мой взгляд, самый простой способ сделать это - предоставить GlobalKey для Scaffold и вызвать openDrawer() для текущего State этого. Вы также можете нажать на значок гамбургера или провести пальцем слева - но вызов openDrawer() является более детерминированным:

void main() {
  testWidgets('my drawer test', (WidgetTester tester) async {
    final scaffoldKey = GlobalKey<ScaffoldState>();
    const displayName = "displayName";

    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          key: scaffoldKey,
          drawer: const Text(displayName),
        ),
      ),
    );

    scaffoldKey.currentState.openDrawer();
    await tester.pump();

    expect(find.text(displayName), findsOneWidget);
  });
}
...