Тест подключаемого потока в дартс - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть следующее 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...