Делайте тесты детерминированными с явными контейнерами.

Большинство тестовых сценариев напрямую соответствуют API ProviderContainer: read, invalidate, refresh, listen и переопределения на экземпляр провайдера.

Test Strategy

Разделяйте тесты на чистые тесты контейнера и интеграционные тесты виджетов.

Pure Dart

Используйте ProviderContainer напрямую для проверок read/invalidate/refresh

Overrides

Переопределяйте каждый экземпляр провайдера через overrideWith / overrideWithValue

Widget tests

Внедряйте внешний контейнер и явно вызывайте dispose

Tip

ProviderContainer.listen не выдаёт начальное значение, если не указан fireImmediately: true.

Команда тестирования и чеклист

Запустите полный набор и убедитесь, что в сценариях autoDispose не остаётся утечек таймеров.

Command

Checklist

- Dispose externally injected ProviderContainer in tearDown.
- Use fireImmediately: true when your listener assertions need initial state.
- For autoDispose tests, advance fake time beyond autoDisposeDelay.

Пример: переопределение по аргументу

Провайдеры семейства переопределяются для каждого экземпляра, созданного вашей фабричной функцией.

class ProductById extends Provider<Product> {
  ProductById(this.id) : super.args((id,));
  final String id;

  @override
  Product build(ref) {
    final repo = ref.watch(productRepoProvider);
    return repo.fetch(id);
  }
}

final container = ProviderContainer(
  overrides: [
    productByIdProvider('a').overrideWithValue(const Product(id: 'a', name: 'stub')),
  ],
);

// assert and cleanup
container.dispose();
Этот шаблон повторяет README и upstream-тесты в репозитории miniriverpod.
Тесты виджетов должны размонтировать виджеты перед dispose внешних контейнеров.
Используйте fake_async, чтобы проверить задержки autoDispose и поведение keepAlive.

Следующие шаги

API Reference

Откройте краткие сигнатуры для ProviderContainer, Ref, AsyncValue и API мутаций.

Open API Reference

Back to Overview

Вернитесь к полной карте документации miniriverpod.

Open Overview