У меня есть следующее Stream
:
static Stream<FirebaseUser> _onAuthStateChangedOrReloaded =
_mergeWithOnUserReloaded(_auth.onAuthStateChanged);
static Stream<FirebaseUser> _mergeWithOnUserReloaded(Stream<FirebaseUser> stream) {
return Rx.merge([stream, onUserReloaded]).publishValue()..connect();
}
publishValue()..connect()
сделать его подключаемым потоком, но у меня возникают проблемы при попытке его протестировать.
Это мой старый тест , до того как я сделал этот поток подключаемым потоком:
test('Reloads emits the new User in onAuthStateChangedOrReloaded', () async {
expect(FirebaseUserReloader.onAuthStateChangedOrReloaded,
emitsInOrder([mockOldUser, mockNewUser]));
await 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()
Мне посоветовали использовать expectAsync1
, но я не могу заставить его работать с emitsInOrder
.
Как я могу протестировать Connectable Stream с emitsInOrder
?