我想测试方法是否触发事件。如果事件是同步触发的,那么测试方法看起来像这样:
$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
它被解雇。
我该怎么做呢?
答案 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