我创建了一个使用BehaviorSubject
的简单Bloc,并且尝试测试其发出的值,但是在测试或错误期间,我不断获得TimeoutException
,以便交换添加的流时
集团
class ApplicationBloc extends BlocBase{
final _appTitle = BehaviorSubject<String>();
Function(String) get changeTitle => (title) => _appTitle.sink.add(title);
Stream<String> get apptitle => _appTitle.stream;
ApplicationBloc(){
// _appTitle.sink.add('title');
}
@override
void dispose() {
_appTitle.close();
}
}
测试
test('check title correct', (){
//works
/* appBloc.changeTitle('hi');
expect(appBloc.apptitle, emitsInAnyOrder(['hi']));*/
//doesn't work
appBloc.changeTitle('hi');
appBloc.changeTitle('hello');
expect(appBloc.apptitle, emitsInOrder(['hi', 'hello']));
});
标题流发出单个项目时,它可以正常工作。但是,当它发出多个项目时,它会超时。 这是交换发射顺序时得到的错误
错误:预期:应按顺序执行以下操作: *发出“嗨”的事件 *发出'hello'的事件实际:'>其中:发出的事件*你好 它没有发出“ hi”事件,因为它发出了不同的事件。 预期:嗨 实际:你好 ^ 在偏移量1处不同
注意:一切正常,当我将BehaviorSubject
更改为StreamController
答案 0 :(得分:0)
超时部分可能是一个错误,导致今天使用RxDart 0.24.1不再存在超时。
但是测试仍然无法通过,因为BehaviorSubject
仅在expect
订阅.apptitle
来监听值时才返回最新值。
要使主题返回其给出的所有内容,请使用ReplaySubject
。