make async方法等待Dart事件

时间:2018-03-24 12:37:36

标签: events async-await dart

我想测试方法是否触发事件。如果事件是同步触发的,那么测试方法看起来像这样:

  $scope.performSearchById = function() {

        $http({
        url: 'rest/product/' + $scope.search.id,
        method: 'GET'
        }).then(function(data){
                $scope.searchResults = [data.data];

               })

     };

由于事件被触发stringBindable_input_firesEvent() { iBindable str = BindableFactory.fromType(Types.String_); bool wasTriggered = false; str.onChangeForGui.listen((v) { wasTriggered = true; }); str.input("test"); //this triggers the event expect(wasTriggered, isTrue); } 我需要async它被解雇。 我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

如果您只想测试单个事件,可以使用expectAsync1

  str.onChangeForGui.listen(expectAsync1((v) {
    wasTriggered = true;
  }));

如果在测试结束前没有调用expectAsync1,测试将失败。

对于更复杂的情况,我会使用其中一个Stream Matchers

expect(str.onChangeForGui, emitsInOrder([(e) => e != null]));

如果需要调用代码以使事件发出,可以使用

final eventsFired = expectLater(str.onChangeForGui, emitsInOrder([(e) => e != null]));
// fire events
return eventsFired; // make the test work for this check