使用 BehaviorSubject 的测试中的 TimeoutException - BLoC
Posted
技术标签:
【中文标题】使用 BehaviorSubject 的测试中的 TimeoutException - BLoC【英文标题】:TimeoutException in test using BehaviorSubject - BLoC 【发布时间】:2019-07-17 05:07:34 【问题描述】:我创建了一个使用 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'事件实际:'>哪个:发出*你好 它没有发出“嗨”的事件,因为它发出了一个不同的事件。 预期:嗨 实际:你好 ^ 在偏移量 1 处不同
注意:当我将 BehaviorSubject
更改为 StreamController
时,一切正常
【问题讨论】:
【参考方案1】:超时部分可能是一个错误,因为今天使用 RxDart 0.24.1,没有超时了。
但测试仍然没有通过,因为BehaviorSubject
仅在expect
订阅.apptitle
以侦听值时返回最新值。
要让主题返回它所提供的所有内容,请使用ReplaySubject
。
【讨论】:
以上是关于使用 BehaviorSubject 的测试中的 TimeoutException - BLoC的主要内容,如果未能解决你的问题,请参考以下文章
找不到模块 'rxjs/subject/BehaviorSubject'
Angular 中的 Subject vs BehaviorSubject vs ReplaySubject