2016-08-12 3 views
1

Я пытаюсь протестировать события потока в своей службе и столкнулся с проблемой: есть ли способ синхронно доставлять события в async-потоке? Вот упрощенный пример кода:Передача событий потока потока

test("deliver event",() { 
    StreamController sc = new StreamController(); 
    String v = "old"; 
    sc.stream.listen((val) {v = val;}); 
    sc.add("new"); 
    expect(v, "new"); // test fails: actual value is "old" 
}); 
+0

Я обновил свой ответ. –

ответ

1

Вы не можете сделать ничего от асинхронного до синхронизации.

import 'dart:async'; 
Future main() async { 
    StreamController sc = new StreamController(); 
    String v = "old"; 
    var subscr = sc.stream.listen((val) { v = val;}); 
    sc.add("new"); 
    subscr.asFuture().then((_) { 
    print('assert v == "new": ${v == 'new'}'); 
    // expect(v, "new"); // test fails: actual value is "old" 
    }); 
    sc.close(); 
} 

DartPad example