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
.