Как проверить StreamBuilder, который имеет задержку в потоке во Flutter? - PullRequest
0 голосов
/ 21 октября 2018

У меня есть поток с задержкой.StreamBuilder никогда не получает значение «foo» из потока в тесте.Если задержка устранена, то тест работает как положено.Как я могу сказать тесту дождаться этой задержки?

testWidgets('stream builder', (tester) async {
  final textKey = Key('textKey');
  final stream = Observable.just('foo').delay(Duration(milliseconds: 1));

  var app = MaterialApp(
    home: StreamBuilder<String>(
      stream: stream,
      builder: (context, snapshot) => Text(
            snapshot.data ?? 'no data',
            key: textKey,
          ),
    ),
  );

  await tester.pumpWidget(app);
  await tester.pump(Duration.zero);

  Text text = tester.widget(find.byKey(textKey));
  expect(text.data, equals('foo'));
});

Сбой при ошибке

══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞══════════════════════════
The following TestFailure object was thrown running a test:
  Expected: 'foo'
  Actual: 'no data'
   Which: is different.
          Expected: foo
            Actual: no data
                    ^
           Differ at offset 0

1 Ответ

0 голосов
/ 21 октября 2018

Нашел решение.Хитрость заключается в том, чтобы обернуть это в tester.runAsync(), и я также должен был добавить tester.idle().

testWidgets('stream builder', (tester) async {
  final textKey = Key('textKey');

  await tester.runAsync(() async { // IMPORTANT
    final stream = Observable.just('foo').delay(Duration(milliseconds: 1));

    var app = MaterialApp(
      home: StreamBuilder<String>(
        stream: stream,
        builder: (context, snapshot) => Text(
              snapshot.data ?? 'no data',
              key: textKey,
            ),
      ),
    );

    await tester.pumpWidget(app);
    await tester.idle(); // IMPORTANT
    await tester.pump(Duration.zero); // IMPORTANT
  });

  Text text = tester.widget(find.byKey(textKey));
  expect(text.data, equals('foo'));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...