0Pricing
Dart Academy · Урок

Тестирование асинхронного кода и потоков

Ожидайте future и проверяйте последовательности событий

«Тестирование асинхронного кода и потоков» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Асинхронность требует внимания

Большая часть настоящего кода возвращает асинхронный результат. Если тест забывает дождаться его, он может завершиться ещё до окончания работы. ⏳

Верните результат или дождитесь его

Средство запуска ожидает завершения, когда тело теста является асинхронным и Вы дожидаетесь результата, либо когда Вы напрямую возвращаете асинхронный результат.

test('loads user', () async {
  final u = await fetchUser();
  expect(u.name, 'Ada');
});

expectLater для асинхронных результатов

Используйте expectLater, когда проверяемое значение само является асинхронным результатом, например чтобы убедиться, что он завершается заданным результатом.

await expectLater(fetchValue(), completion(42));

Сопоставитель завершения

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

expectLater(load(), completion(isNotEmpty));

Проверка асинхронных ошибок

Чтобы проверить, что асинхронный результат завершается ошибкой, объедините expectLater с throwsA, и тест убедится, что выброшена правильная ошибка.

await expectLater(
  risky(), throwsA(isA<StateError>()));

Потоки выдают много значений

Поток отправляет последовательность событий с течением времени. Его тестирование означает проверку всей последовательности в правильном порядке.

Сопоставитель выдачи

Используйте сопоставитель выдачи, чтобы проверить следующее значение, которое производит поток, а emitsInOrder — для проверки ожидаемой последовательности.

await expectLater(
  counter, emitsInOrder([1, 2, 3]));

Сигнализируйте окончание

Сопоставитель emitsDone проверяет, что поток закрывается в ожидаемый момент, обнаруживая потоки, которые никогда не завершаются.

expectLater(ticks, emitsThrough(emitsDone));

Ошибки потоков тоже важны

Объединяйте сопоставители с emitsError, чтобы ожидать ошибку в потоке и проверять, что ошибки приходят в виде событий.

emitsInOrder([1, emitsError(isException)]);

Остерегайтесь ложных успехов

Распространённая ошибка: если забыть дождаться результата, тест завершится раньше времени и молча пройдёт. Всегда дожидайтесь асинхронной работы или возвращайте её результат.

Тайм-ауты спасают

Если асинхронный код зависает, средство запуска останавливает его. Для медленного теста можно настроить ожидание с помощью тайм-аута.

test('slow', () async { /* ... */ },
  timeout: Timeout(Duration(seconds: 5)));

Быстрая проверка

Как проверить, что поток выдаёт 1, 2, 3 по порядку?

Повторение

Вы дожидались асинхронных результатов, использовали expectLater с сопоставителями завершения и throwsA, а потоки проверяли с помощью сопоставителей выдачи. Теперь асинхронный код тестируется уверенно. 🌊

Часто задаваемые вопросы

Урок «Тестирование асинхронного кода и потоков» бесплатный?

Да — полный текст урока «Тестирование асинхронного кода и потоков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Тестирование асинхронного кода и потоков»?

Ожидайте future и проверяйте последовательности событий Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Тестирование асинхронного кода и потоков»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Ваш первый тест и expect
  2. group, setUp и tearDown
  3. Тестирование асинхронного кода и потоков
  4. Моки, имитации и покрытие
← Назад к Dart Academy