使用BehaviorSubject-BLoC

时间:2019-02-23 04:53:32

标签: dart flutter rxdart bloc

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

时,一切正常

1 个答案:

答案 0 :(得分:0)

超时部分可能是一个错误,导致今天使用RxDart 0.24.1不再存在超时。

但是测试仍然无法通过,因为BehaviorSubject仅在expect订阅.apptitle来监听值时才返回最新值。

要使主题返回其给出的所有内容,请使用ReplaySubject