Я пишу модульный тест для метода Flutter, который вызывает асинхронный метод, а затем возвращает его, оставляя асинхронное выполнение как и когда. Мой тест не проходит "после того, как он уже завершен".
Вот мой тест:
test('mark as viewed', () {
final a = Asset();
expect(a.viewed, false);
a.markAsViewed();
expect(a.viewed, true);
});
и вот метод, который он тестирует:
void markAsViewed() {
viewed = true;
Repository.get().saveToStorage();
}
saveToStorage()
Метод асинхронный, который я просто оставляю для выполнения в фоновом режиме.
Как мне заставить эту работу работать? Провал теста говорит мне Make sure to use [expectAsync] or the [completes] matcher when testing async code.
, но я не вижу, как это сделать. Может кто-нибудь объяснить или указать мне правильную документацию, пожалуйста? Я не могу найти ничего о том, как обрабатывать эти асинхронные операции, когда возвращается не Future
, а просто оставлено для завершения отдельно.
Чтобы было ясно - этот модульный тест не касается проверки того,он сохраняется в хранилище, просто базовый тест по установке viewed
равным true
.
Отредактировано
Ошибка следующая:
package:flutter/src/services/platform_channel.dart 319:7 MethodChannel.invokeMethod
===== asynchronous gap ===========================
dart:async _asyncErrorWrapperHelper
package:exec_pointers/asset_details.dart Repository.saveToStorage
package:exec_pointers/asset_details.dart 64:22 Asset.markAsViewed
test/asset_details_test.dart 57:9 main.<fn>.<fn>
This test failed after it had already completed. Make sure to use [expectAsync]
or the [completes] matcher when testing async code.