Dart 使用BehaviorSubject-BLoC的测试中的TimeoutException

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

我创建了一个简单的Bloc,它使用了
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