flutterのtestについてのまとめで今回はpumpについてまとめました。
概要
pumpメソッドとは
- test環境でframeを描画(発火)させる
- Duration引数を設定した場合、与えらたら秒数後に描画
jank
- pumpメソッドは与えられた時間ジャンクしたように見せる
- Jank とはアプリが滑らかに描画できず、フレームを落とす(描画間隔が遅れる)こと。
- 例:本来 60fps で描画すべきが、処理が重くて 16ms の間に描画できず、次のタイミングまでスキップしてしまう。
使用例
使用するテスト
- Providerでエラーをわざと吐き出す
- エラーのテキストをチェックするテスト
ソースコード
testWidgets('エラーならエラーテキストを表示', (tester) async {
await tester.pumpWidget(
ProviderScope(overrides: [
authStateProvider.overrideWith(
(ref) => Stream.error('error'),
),
], child: const MaterialApp(home: App())),
);
await tester.pump();
expect(
find.text('Error occurred while checking user status'), findsOneWidget);
});ここでのpumpの役割
- test.pumpWidgetでUIを構築
- ただ、authStateProviderは非同期なのでまだエラーは流れていない
- pumpをすることで
- もう一度描画し「次のフレームまで時間が進んだ」ことをシュミレート
Stream.error('error')が即座に発火しても、それに伴うsetState/Providerの再ビルドは 次のフレームで反映されるので、ここで改めて描画が走る。- その結果、エラーテキストが UI に出てくる。
時間経過のイメージ
pumpWidget()
└─ 初期描画(Stream 監視開始)
pump()
└─ 1フレーム進める
├─ Stream が error イベントを流す
├─ Provider が再ビルドをトリガー
└─ エラーメッセージ描画結論
pumpは「時間経過や次フレームの発生をシミュレーションして、非同期処理の結果を反映させた描画」を実行できる- そのため、Future や Stream による状態変化、アニメーション、遅延処理などをテストで再現する際に必須となる
- pump = テスト環境でUIを進めるスイッチのようなもの



コメント