ra9*_*a9r 6 unit-testing dart flutter-test
考虑以下测试代码...
main() {
StreamController controller;
setUp(() {
controller = StreamController.broadcast(sync: false);
});
tearDown(() {
controller.close();
});
test('Stream listen test', () {
var stream = controller.stream;
stream.listen((event) {
// >>>>> How can I test if this was called?? <<<<<<
});
controller.add('Here is an event!');
});
}
Run Code Online (Sandbox Code Playgroud)
...测试stream.listen(...)回调是否被调用的正确方法是什么?
stream.listen(...)不返回一个Future所以传统expectAsyncX风格的匹配器在这里不起作用。
也许有某种方法可以使用StreamSubscription.asFuture()返回的stream.listen(...)?
die*_*per 17
您可以使用expectLater函数来等待您的async响应,Stream并Stream使用emits将您的值与您发出的值进行比较,如下所示:
test('Stream listen test', () {
var stream = controller.stream;
final String value = 'Here is an event!';
stream.listen((event) {
// >>>>> How can I test if this was called?? <<<<<<
});
expectLater(stream, emits(value));
controller.add(value);
});
Run Code Online (Sandbox Code Playgroud)
更新
您可以expectAsync1在您的listen方法中尝试,如果没有发出任何值,则会触发超时。
stream.listen(
expectAsync1(
(event) {
expect(event, value);
},
),
);
Run Code Online (Sandbox Code Playgroud)