Dart 使用BehaviorSubject-BLoC的测试中的TimeoutException
我创建了一个简单的Bloc,它使用了Dart 使用BehaviorSubject-BLoC的测试中的TimeoutException,dart,flutter,rxdart,bloc,Dart,Flutter,Rxdart,Bloc,我创建了一个简单的Bloc,它使用了BehaviorSubject,我正在尝试测试它发出的值,但在测试过程中我一直得到TimeoutException,或者在交换添加的流时按顺序得到错误 集团 class ApplicationBloc extends BlocBase{ final _appTitle = BehaviorSubject<String>(); Function(String) get changeTitle => (title) => _ap
BehaviorSubject
,我正在尝试测试它发出的值,但在测试过程中我一直得到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']));
});
当标题流发出单个项目时,它工作正常。但当它发射多个项目时,它就会超时。
这是交换发射顺序时出现的错误
错误:应为:应按顺序执行以下操作:
*发出一个“hi”事件
*发出一个“hello”实际:'>Which:emissed*hello的事件
它没有发出一个“hi”的事件,因为它发出了一个不同的事件。
期待:嗨
你好
^
在偏移量1处不同
注意:当我将
行为主体
更改为StreamController
时,一切都按照我的预期运行。超时部分可能是一个错误,因为现在RxDart 0.24.1不再有超时
但是测试仍然没有通过,因为BehaviorSubject
仅在expect
订阅.apptitle
以侦听值时返回最新值
要让主题返回它给出的所有内容,请使用ReplaySubject