明示的なコンテナ管理でテストを安定化。

多くの検証は ProviderContainer API で完結します。read/invalidate/refresh/listen と instance単位 override を中心に組み立てます。

テスト方針

純粋なコンテナテストと Widget統合テストを分けると見通しが良くなります。

Pure Dart

ProviderContainer を直接使い read/invalidate/refresh を検証

override

Providerインスタンス単位で overrideWith / overrideWithValue

Widgetテスト

外部注入コンテナを使う場合は明示 dispose

補足

ProviderContainer.listen は fireImmediately: true を付けない限り初期値を流しません。

実行コマンドとチェック項目

autoDispose を含むケースでは pending timer が残らないことまで確認します。

コマンド

flutter test

チェック項目

- 外部注入した ProviderContainer は tearDown で必ず dispose する。
- listen で初期値検証が必要なら fireImmediately: true を使う。
- autoDispose 検証では fake_async で autoDisposeDelay を経過させる。

例: 引数ごとの override

family 相当の Provider はファクトリ関数が返すインスタンス単位で override します。

product_provider_test.dart
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')),
  ],
);

// 検証後に解放
container.dispose();
このパターンは README と upstream テスト実装の方針に一致します。
Widgetテストではアンマウント後に外部コンテナを dispose してください。
autoDispose と keepAlive の境界条件は fake_async で再現可能です。

次のステップ

APIリファレンス

ProviderContainer、Ref、AsyncValue、mutation API の要点を確認します。

APIリファレンスを開く

概要へ戻る

miniriverpod 全体の導線に戻ります。

概要を開く