非同期コードと Stream のテスト
Future を await し、イベントの順序を検証します
「非同期コードと Stream のテスト」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
非同期処理には注意が必要
実際のコードの多くはFutureを返します。テストで待つのを忘れると、処理が終わる前に成功してしまうことがあります。⏳
returnするかawaitする
テスト本体がasyncで処理をawaitする場合、またはFutureを直接returnする場合、テストランナーは完了を待ちます。
test('loads user', () async {
final u = await fetchUser();
expect(u.name, 'Ada');
});FutureにはexpectLaterを使う
一致させる値自体がFutureの場合はexpectLaterを使います。たとえば、Futureが指定した結果で完了することを確認できます。
await expectLater(fetchValue(), completion(42));completion Matcher
completion matcherは、Futureが正常に完了し、その値が内部のmatcherに一致した場合に成功します。
expectLater(load(), completion(isNotEmpty));非同期エラーを期待する
Futureが失敗することをアサートするには、expectLaterとthrowsAを組み合わせ、正しいエラーがスローされることをテストで確認します。
await expectLater(
risky(), throwsA(isA<StateError>()));Streamは多くの値を発行する
Streamは、時間の経過に伴って一連のイベントを送ります。テストでは、その一連のイベント全体を順番どおりに確認します。
emits Matcher
emitsを使うと、Streamが次に生成する値をアサートできます。期待する順序の列にはemitsInOrderを使います。
await expectLater(
counter, emitsInOrder([1, 2, 3]));終了を通知する
emitsDone matcherは、期待した時点でStreamが閉じることを確認します。いつまでも終了しないStreamを見つけるのに役立ちます。
expectLater(ticks, emitsThrough(emitsDone));Streamのエラーも確認する
matcherを組み合わせ、emitsErrorでStream内のエラーを期待します。失敗がイベントとして届くことを確認できます。
emitsInOrder([1, emitsError(isException)]);見かけだけの成功に注意する
よくあるバグは、awaitを忘れることです。テストが早く終了し、ひそかに成功してしまいます。非同期処理は必ずawaitするかreturnしてください。
タイムアウトが役に立つ
非同期コードが停止して進まない場合、テストランナーが処理を停止します。時間のかかるテストでは、timeoutを指定して待機時間を調整できます。
test('slow', () async { /* ... */ },
timeout: Timeout(Duration(seconds: 5)));クイックチェック
Streamが1、2、3を順番に発行することをどのようにアサートしますか?
まとめ
Futureをawaitし、expectLaterとcompletionおよびthrowsAを使い、emits matcherでStreamを確認しました。非同期処理も自信を持ってテストできます。🌊
よくある質問
「非同期コードと Stream のテスト」レッスンは無料ですか?
はい。「非同期コードと Stream のテスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「非同期コードと Stream のテスト」で何を学びますか?
Future を await し、イベントの順序を検証します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「非同期コードと Stream のテスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 最初の test と expect
- group、setUp、tearDown
- 非同期コードと Stream のテスト
- Mock、Fake、カバレッジ