Как заставить ожидание окончания установки в дротике? - PullRequest
0 голосов
/ 04 января 2019

У меня есть асинхронный тест, который я настраиваю, добавляя некоторые элементы в поток в методе setUp. Сама установка синхронизирована и не требует специальной обработки. К сожалению, тест сработает до того, как мой setUp закончится! Как мне добиться этого «механизма ожидания», когда я не могу использовать await, потому что, как уже упоминалось, в setUp нет кода async? Я попытался добавить async, но ждать нечего ...

Пример: У меня есть объект _bloc, который увеличивает и генерирует счет (int) всякий раз, когда событие клика добавляется в его приемник кликов.

  group("after 10 clicks", () {
    setUp(() {
      List.generate(10, (i) => i).forEach((_) {
        _bloc.clicks.add(null);
      });
    });

    test("score is 10", () async {
      var _score = await _bloc.score.first;

      expect(_score, equals(10));
    });
  });

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Тест не запускается до завершения setUp. Но он запускается до того, как произойдут все нужные события, и это из-за асинхронной природы объекта BLoC. clicks все выполняются, но поток score еще не отправил все соответствующие события, потому что он все еще обрабатывает события щелчка ввода.

В любом случае, что касается вопроса, обратный вызов async в функции setUp завершается до запуска теста.

0 голосов
/ 04 января 2019

Сделать setUp асинхронным и вернуть Future, который завершается после выполнения setUp.

Среда тестирования ожидает завершения этого Future, прежде чем запустить тест.

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