Тест виджета Flutter не прошел для InkWell Tap

У меня есть такой тест виджета, я могу найти его с помощью actionKey, но тест на нажатие не проходит и tapped значение ложно после tester.tap(...), что не так с моим тестом?

testWidgets('some test', (WidgetTester tester) async {
  final UniqueKey actionKey = UniqueKey();
  bool tapped = false;

  await tester.pumpWidget(MaterialApp(
    home: Scaffold(
      body: SlidableListItem(
        child: const ListTile(title: Text('item')),
        actions: <Widget>[
          InkWell(
            key: actionKey,
            child: const Text('action'),
            onTap: () => tapped = true,
          ),
        ],
      ),
    ),
  ));

  await tester.tap(find.byKey(actionKey));
  await tester.pump();

  expect(find.byKey(actionKey), findsOneWidget);
  expect(tapped, isTrue); <- failes
});
The following TestFailure object was thrown running a test:
  Expected: true
  Actual: <false>

4 ответа

У меня работает оценка виджета.

      InkWell InkWellButton() => find
          .byKey(actionKey)
          .evaluate()
          .first
          .widget;                                                                                 

а затем действие на Inkwell работает.

      InkWellButton().onTap();
await tester.pumpAndSettle();                                                            

Надеюсь это поможет!

Попробуйте сделать InkWell дочерним элементом виджета Material.

источник

Попробуйте подождать после нажатия примерно 2 секунды.

            await tester.pump(Duration(seconds: 2));

Я думаю, это должно сработать, так как у меня это сработало.

Я понял. Вы должны установитьensureVisible()первый.

      var foo = find.byKey(actionKey);
await tester.ensureVisible(foo); // <-- here
await tester.tap(foo);
await tester.pumpAndSettle();
Другие вопросы по тегам