2

我创建了一个简单的 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”事件实际:'>哪个:发出*你好,它没有发出一个“hi”事件,因为它发出了一个不同的事件。预期:你好 实际:你好 ^ 在偏移量 1 处不同

注意:当我更改为时,一切都按我的预期BehaviorSubject工作StreamController

4

1 回答 1

0

超时部分可能是一个错误,因为今天使用 RxDart 0.24.1,不再有超时。

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

要让主题返回它所提供的所有内容,请使用ReplaySubject.

于 2020-11-03T18:39:45.450 回答