У меня есть асинхронный тест, который я настраиваю, добавляя некоторые элементы в поток в методе 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));
    });
  });
1
idow09 4 Янв 2019 в 14:48

2 ответа

Лучший ответ

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

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

0
idow09 18 Янв 2019 в 13:34

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

Платформа тестирования ожидает завершения этого Future перед запуском теста.

1
Günter Zöchbauer 4 Янв 2019 в 11:51