TimeoutException в тесте с использованием BehaviorSubject - 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' Actual: '> Which: emitted * привет, которое не испустило событие, которое' hi ', потому что оно выдало событие, которое отличается Ожидаемый: привет Фактический: привет ^ Разница по смещению 1

ПРИМЕЧАНИЕ: все работает, как я ожидаю, когда я изменяю BehaviorSubject в StreamController

0 ответов

Часть тайм-аута могла быть ошибкой, потому что сегодня с RxDart 0.24.1 таймаута больше нет.

но тест все равно не проходит, потому что BehaviorSubject возвращает только последнее значение, когда expect подписывается на .apptitle прислушиваться к ценностям.

чтобы субъект вернул все, что ему было дано, используйте ReplaySubject.

Другие вопросы по тегам