在Dart中测试可连接流

在Dart中测试可连接流,dart,stream,rxdart,Dart,Stream,Rxdart,我有以下流: 静态流\u OnAuthStateChange已重新加载= _MergewithOnUserReload(_auth.onAuthStateChanged); 静态流\u MergeWithOnUserReload(流){ 返回Rx.merge([stream,onUserReload]).publishValue()…connect(); } publishValue()…connect()将其设置为可连接流,但我在尝试测试时遇到问题 这是我的旧测试,在我将该流设置为可连接流之

我有以下

静态流\u OnAuthStateChange已重新加载=
_MergewithOnUserReload(_auth.onAuthStateChanged);
静态流\u MergeWithOnUserReload(流){
返回Rx.merge([stream,onUserReload]).publishValue()…connect();
}
publishValue()…connect()
将其设置为可连接流,但我在尝试测试时遇到问题

这是我的旧测试,在我将该流设置为可连接流之前:

test('Reloads在OnAuthStateChangedorreloated'中发出新用户,()异步{
expect(FirebaseUserReloader.OnAuthStateChangedorReloated,
emitsInOrder([mockOldUser,mockNewUser]);
等待FirebaseUserReloader.reloadCurrentUser();
});
但此测试不适用于可连接流,因为测试使用
StreamQueue
,需要在流上调用
pause
,如果我尝试以下操作,则会出现此错误:

dart:core                                              Object.noSuchMethod
package:async/src/stream_queue.dart 472:19             StreamQueue._pause
package:async/src/stream_queue.dart 434:7              StreamQueue._updateRequests
package:async/src/stream_queue.dart 514:5              StreamQueue._addResult
package:async/src/stream_queue.dart 484:9              StreamQueue._ensureListening.<fn>
dart:async                                             _EventSinkWrapper.add
package:rxdart/src/transformers/start_with.dart 18:17  _StartWithStreamSink.add
dart:async                                             _StreamSinkWrapper.add
package:rxdart/src/transformers/start_with.dart 59:13  _StartWithStreamSink._safeAddFirstEvent
package:rxdart/src/transformers/start_with.dart 40:13  _StartWithStreamSink.onListen
package:rxdart/src/utils/forwarding_stream.dart 18:22  forwardStream.<fn>
dart:async                                             _BoundSinkStream.listen
package:rxdart/src/streams/defer.dart 37:18            DeferStream.listen
dart:async                                             StreamView.listen
package:async/src/stream_queue.dart 483:31             StreamQueue._ensureListening
package:async/src/stream_queue.dart 542:7              StreamQueue._addRequest
package:async/src/stream_queue.dart 299:5              StreamQueue.startTransaction
package:test_api                                       expect
package:flutter_test/src/widget_tester.dart 234:3      expect
test\firebase_user_stream_test.dart 70:7               main.<fn>.<fn>
===== asynchronous gap ===========================
dart:async                                             _BoundSinkStream.listen
package:rxdart/src/streams/defer.dart 37:18            DeferStream.listen
dart:async                                             StreamView.listen
package:async/src/stream_queue.dart 483:31             StreamQueue._ensureListening
package:async/src/stream_queue.dart 542:7              StreamQueue._addRequest
package:async/src/stream_queue.dart 299:5              StreamQueue.startTransaction
package:test_api                                       expect
package:flutter_test/src/widget_tester.dart 234:3      expect
test\firebase_user_stream_test.dart 70:7               main.<fn>.<fn>

NoSuchMethodError: The method 'pause' was called on null.
Receiver: null
Tried calling: pause()
dart:core Object.noSuchMethod
包:async/src/stream\u queue.dart 472:19 StreamQueue.\u暂停
包:async/src/stream\u queue.dart 434:7 StreamQueue.\u updateRequests
包:async/src/stream\u queue.dart 514:5 StreamQueue.\u addResult
包:async/src/stream\u queue.dart 484:9 StreamQueue.\u确保重新侦听。
dart:async\u EventSinkWrapper.add
包:rxdart/src/transformers/start_with.dart 18:17 _StartWithStreamSink.add
dart:async\u StreamSinkWrapper.add
包:rxdart/src/transformers/start_with.dart 59:13 _StartWithStreamSink._safeAddFirstEvent
包:rxdart/src/transformers/start_with.dart 40:13_StartWithStreamSink.onListen
包:rxdart/src/utils/forwarding_stream.dart 18:22 forwardStream。
dart:async\u BoundSinkStream.listen
包:rxdart/src/streams/defer.dart 37:18 DeferStream.listen
dart:async StreamView.listen
包:async/src/stream\u queue.dart 483:31 StreamQueue.\u正在重新侦听
包:async/src/stream\u queue.dart 542:7 StreamQueue.\u addRequest
包:async/src/stream_queue.dart 299:5 StreamQueue.startTransaction
包:test_api expect
包装:颤振测试/src/widget测试仪。dart 234:3预期
test\firebase\u user\u stream\u test.dart 70:7 main。。
======异步间隙===========================
dart:async\u BoundSinkStream.listen
包:rxdart/src/streams/defer.dart 37:18 DeferStream.listen
dart:async StreamView.listen
包:async/src/stream\u queue.dart 483:31 StreamQueue.\u正在重新侦听
包:async/src/stream\u queue.dart 542:7 StreamQueue.\u addRequest
包:async/src/stream_queue.dart 299:5 StreamQueue.startTransaction
包:test_api expect
包装:颤振测试/src/widget测试仪。dart 234:3预期
test\firebase\u user\u stream\u test.dart 70:7 main。。
NoSuchMethodError:对null调用了方法“pause”。
收件人:空
已尝试呼叫:暂停()
有人建议我使用
expectAsync1
,但我无法使它与
emitsInOrder
一起工作


如何使用
emitsInOrder
测试可连接流?

有相同的问题,您找到解决方案了吗?是的,您必须订阅流并创建自己的逻辑来测试它。将预期结果添加到列表中,并在排放时进行检查,您可能需要调用空的未来来触发排放。这将是更多的手动代码。谢谢,这为我解决了它!遇到同样的问题,您找到解决方案了吗?是的,您必须订阅流并制定自己的逻辑来测试它。将预期结果添加到列表中,并在排放时进行检查,您可能需要调用空的未来来触发排放。这将是更多的手动代码。谢谢,这为我解决了它!