events - 使异步方法等待Dart事件

标签 events async-await dart

我想测试一种方法是否会触发事件。如果事件是同步触发的,则测试方法将如下所示:

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,因此我需要对其进行await触发。
我将如何处理?

最佳答案

如果只想测试一个事件,则可以使用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 

关于events - 使异步方法等待Dart事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464754/

相关文章:

javascript - 在 React 中使用异步从 API 恢复数据时遇到问题

javascript - 等待/异步问题

flutter - 对于包含 map 的 map ,SQFLite( flutter )插入失败

java - 某些组件不响应事件

c++ - 确定场景何时在 Maya 中完成加载

iphone - 长按添加新 View 后如何保留触摸事件

flutter - 响应式元素与 MediaQuery 对齐 - 使用不包含它的上下文调用

javascript - 放置结束后和上传前的 Dropzone.js 事件

c# - TPL 数据流和异步方法调用

android - Flutter 插件开发 : importing libraries