我想测试一种方法是否会触发事件。如果事件是同步触发的,则测试方法将如下所示:
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/