【问题标题】:How to test StreamBuilder that has a delay in the stream in Flutter?如何在 Flutter 中测试流中有延迟的 StreamBuilder?
【发布时间】:2018-10-20 23:51:30
【问题描述】:

我有一个有延迟的流。 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

【问题讨论】:

    标签: flutter


    【解决方案1】:

    找到了解决办法。诀窍是将其包装在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'));
    });
    

    【讨论】:

    • 测试方法idle()pump(zero) 实际上添加到等式中的是什么?他们帮助我在测试运行期间解决了与 BLoC 状态处理类似的问题,但想了解原因:)
    猜你喜欢
    • 2021-05-17
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2013-12-09
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多