Как дождаться асинхронной установки в модульном тесте в Dart?

Для моих модульных тестов требуется установка, которая должна работать асинхронно. То есть мне нужно дождаться завершения настройки перед запуском тестов, но настройка связана с фьючерсами.


person Seth Ladd    schedule 21.02.2013    source источник


Ответы (2)


В Dart M3 функция setUp может дополнительно возвращать Future. Если setUp возвращает Future, инфраструктура модульного тестирования будет ждать завершения Future, прежде чем запускать отдельные методы тестирования.

Вот пример:

group(('database') {
  var db = createDb();
  setUp(() {
    return openDatabase()
      .then((db) => populateForTests(db));
  });

  test('read', () {
    Future future = db.read('foo');
    future.then((value) {
      expect(value, 'bar');
    });
    expect(future, completes);
  });
});

Узнайте больше о setUp.

person Seth Ladd    schedule 21.02.2013

Хотя принятый ответ Сета верен, следующий пример может быть проще для понимания и повторного использования. Он возвращает Future и выполняет настройку в асинхронной рабочей функции Future:

setUp(() {
  return Future(() async {
    await someFuture();
    callSomeFunction();
    await anotherFuture();
  });
});

Тестовые случаи будут вызываться после возврата последнего вызова anotherFuture().

person Ber    schedule 21.12.2020