我创建了一个使用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

09-27 11:03