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

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

Test Strategy

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

Pure Dart

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

Overrides

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

Widget tests

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

Tip

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

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

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

Command

Checklist

- 外部注入した ProviderContainer は tearDown で必ず dispose する。
- listener の検証で初期値が必要な場合は fireImmediately: true を使う。
- autoDispose テストでは fake time を autoDisposeDelay より先へ進める。

例: 引数ごとの override

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

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 テスト実装の方針に一致します。
Widgetテストではアンマウント後に外部コンテナを dispose してください。
autoDispose と keepAlive の境界条件は fake_async で再現可能です。

次のステップ

API Reference

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

Open API Reference

Back to Overview

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

Open Overview