Flutter Pulse
970 subscribers
556 photos
1 file
1.49K links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Как протестировать Изолят
Запуск функции изолята в модульных тестах

При написании модульных тестов для Flutter-приложений часто возникает необходимость протестировать функции, выполняющиеся в изоляте. Изолят - это отдельный поток выполнения в Dart, который может выполняться параллельно с основным потоком. Однако тестирование таких функций может быть проблематичным.

Рассмотрим пример неправильного тестирования изолята:


testWidgets('upload file and save avatar', (tester) async {
final file = await rootBundle.load('assets/images/splashscreen.png');
final bytes = file.buffer.asUint8List();
final xfile = XFile.fromData(bytes);

final jpgData = await compute(_avatarThumbnail, file);
}

// Функция, выполняющаяся в изоляте
Future<Uint8List> _avatarThumbnail(XFile file) {
return file.toJpeg(file, 300, 80);
}


Такой тест зависнет и никогда не завершится, поскольку функция compute запускает _avatarThumbnail в изоляте, но тест не ожидает завершения изолята.

Решение: Используйте tester.runAsync() для запуска асинхронного кода в тесте:


testWidgets('upload file and save avatar', (tester) async {
await tester.runAsync(() async {
final file = await rootBundle.load('assets/images/splashscreen.png');
final bytes = file.buffer.asUint8List();
final xfile = XFile.fromData(bytes);

final jpgData = await compute(_avatarThumbnail, file);
});
});

// Функция, выполняющаяся в изоляте
Future<Uint8List> _avatarThumbnail(XFile file) {
return file.toJpeg(file, 300, 80);
}


Таким образом, вы сможете корректно протестировать функции, выполняющиеся в изоляте.

Оцените новую рубрику и напишите своё мнение! 👍💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #Testing #Isolate #FlutterTips #DartTips
👍1
Самые лучшие обновлённые пакеты за последние 24 часа

meta 1.18.1 - пакет для добавления аннотаций, которые помогают инструментам Dart SDK анализировать код более эффективно. Теперь аннотацию @awaitNotRequired можно использовать для типдефов. Лайков: 468, Скачиваний: 5 000 000. Подробнее: https://pub.dev/packages/meta

money2 6.2.0 - библиотека Dart для работы с денежными значениями и валютами. В новой версии исправлены ошибки, добавлены новые поля в формате JSON валют, исправлены наименования некоторых валют в соответствии с ISO-стандартами и добавлены новые цифровые валюты. Пакет имеет 201 лайк и более 49 300 скачиваний. Подробнее: https://pub.dev/packages/money2

isolate_channel 0.4.2 - пакет для создания каналов связи между изолятами в приложениях Flutter. В новой версии обновлена документация: теперь rõчно указано, что функция connectToIsolate возвращает Future. Пакет имеет 22 лайка и более 96600 скачиваний. Подробнее: https://pub.dev/packages/isolate_channel

flutter_js 0.8.7 - движок JavaScript для использования с Flutter, позволяющий запускать код JavaScript как родной код внутри мобильных приложений Flutter. В новой версии 0.8.7 исправлена проблема с производительностью в методе toUTF8. Пакет имеет 352 лайка и более 32 400 скачиваний. Подробнее: https://pub.dev/packages/flutter_js

dcli_core 8.4.2 - пакет, предоставляющий основные библиотеки для использования DCli в не-консольных приложениях. В обновлении исправлена ошибка чтения, обновлены шаблоны и исправлены пути. Пакет набрал 2 лайка и 50700 скачиваний. Подробнее: https://pub.dev/packages/dcli_core

FlutterPulse — канал о мире Flutter!

Поддержать канал

#Flutter #Dart #PubDev #FlutterPulse #FlutterPulseBestPackages #meta #money2 #isolate_channel #flutter_js #dcli_core