如何强制等待setUp以Dart结尾?

时间:2019-01-04 11:48:04

标签: unit-testing asynchronous dart stream async-await

我有一个异步测试,该测试通过在setUp方法中向流中添加一些项来进行设置。设置本身是同步的,不需要任何特殊处理。不幸的是,测试在我的setUp完成之前就触发了!如前所述,由于await中没有async代码,我无法使用setUp时如何实现这种“等待机制”?我尝试添加async,但没有什么可等待的...

一个例子: 我有一个_bloc对象,每次将点击事件添加到其点击接收器时,该对象都会递增并发出一个分数(int)。

  group("after 10 clicks", () {
    setUp(() {
      List.generate(10, (i) => i).forEach((_) {
        _bloc.clicks.add(null);
      });
    });

    test("score is 10", () async {
      var _score = await _bloc.score.first;

      expect(_score, equals(10));
    });
  });

2 个答案:

答案 0 :(得分:1)

使setUp异步并返回Future完成后完成的setUp

测试框架在运行测试之前等待Future完成。

答案 1 :(得分:0)

-f email, name // this is wrong 完成之前,测试不会运行。但是它确实在所有期望的事件发生之前运行,这是由于setUp对象的异步性质。 BLoC已全部执行,但clicks流尚未发出所有相应的事件,因为它仍在处理输入的点击事件。

无论如何,对于这个问题,score函数中的async回调在测试运行之前就已完成。