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