我创建了一个使用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']));
});
当标题流发出单个项目时,它可以正常工作。但是,当它发出多个项目时,它会超时。
这是交换发射顺序时遇到的错误
注意:一切正常,当我将
BehaviorSubject
更改为StreamController
时 最佳答案
超时部分可能是一个错误,导致今天使用RxDart 0.24.1,现在没有超时了。
但测试仍未通过,因为BehaviorSubject
仅在expect
订阅.apptitle
侦听值时才返回最新值。
要使主体返回它给出的所有内容,请使用ReplaySubject
。