Как проверить, что поток генерирует что-либо в течение интервала времени в модульных тестах (Flutter)? - PullRequest
0 голосов
/ 30 мая 2019

В моем коде функция выдает значение в поток через одну минуту. Допустим, это таймер. Я хочу сделать модульное тестирование (не тестирование виджетов, потому что функция живет в файле блока). Я пытался использовать fakeAsync, как описано в doc https://api.flutter.dev/flutter/quiver.testing.async/FakeAsync-class.html, но безуспешно. Тест не пройден по таймауту. Протестированный код:

class BarcodeBloc {
  Timer _timer;
  StreamController<bool> _timerFinished;

  BarcodeBloc() {
    _timerFinished = new StreamController();
  }

  Stream<bool> get cameraTimeout => _timerFinished.stream;

  void _tick() {
    _timerFinished.add(true);
  }

  void startTimer() {
    stopTimer();
    print("starting timer");
    _timer = Timer(interval, _tick);
  }

  void stopTimer() {
    if (_timer != null) {
      _timer.cancel();
    }
  }
}

Мой код для теста:

void main() {

  test("After one minute emits true", () {
    new FakeAsync().run((async) {
       BarcodeBloc barcodeBloc = new BarcodeBloc(preferenceProvider);
       barcodeBloc.startTimer();

       async.elapse(duration);
       expect(barcodeBloc.cameraTimeout, emits(true));
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...