【问题标题】:How to wait scheduled future with flutter_test?如何用flutter_test等待预定的未来?
【发布时间】:2021-06-30 08:18:13
【问题描述】:

我的小部件执行一个异步任务,我想检查它是否完成。

但似乎小部件测试器在任务执行之前终止了测试。整个代码是here

class MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    test();
  }

  Stream<int?> stream(Future<void> Function() worker) async* {
    Stream<int?> work() async* {
      await worker();
      yield 3;
    }

    yield* work();
  }

  Future<void> sampleWorker() async {
    throw Error();
  }

  Future<void> test() async {
    print('start');
    try {
      await for (final v in stream(sampleWorker)) {
        print(v);
      }
      print('point 1');
    } catch (error, stack) {
      print(stack);
    }
    print('done');
  }
}

void main() {
  testWidgets('Widget test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp());
    await tester.pumpAndSettle(const Duration(milliseconds: 1000));
  });

  test('Plain test', () async {
    await MyHomePageState().test();
  });
}

我希望两个测试都打印堆栈跟踪,但只有“普通测试”显示预期行为。以下是日志。

start
✓ Widget test
start
#0      MyHomePageState.sampleWorker (package:bug_report/main.dart:48:5)
#1      MyHomePageState.stream.work (package:bug_report/main.dart:40:19)
<asynchronous suspension>
#2      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
<asynchronous suspension>

done
✓ Plain test

如何进行第一次测试打印堆栈跟踪?我不应该等待test(),因为它应该是小部件的内部任务。

【问题讨论】:

    标签: flutter flutter-test


    【解决方案1】:

    尝试使用WidgetTesterrunAsync 函数等待任意时间,以等待内部小部件的异步任务完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-11
      • 2020-05-13
      • 2019-08-31
      • 2019-08-19
      • 2019-04-20
      • 2019-03-11
      相关资源
      最近更新 更多