ウィジェットテスト:Renderflexオーバーフローエラーを扱う


我々は確かに前に私たちのUIでそれを見てきた、“レンダーフレックスオーバーフロー…”そして、我々はすべてのこのエラーを知っている私たちのUIは、利用可能な不動産の範囲を超えて塗装されていることを意味します.
これがスクリーンにあるとき、それは修正するのが非常に簡単です、しかし、あなたがいつあなたの装置をテストしているか、そして、あなたがこれに走らせるとき、どうですか?
これは何度か実行したことがありますが、ほとんどの場合は、テストで無視していましたが、ほとんどの優先度をテストしています.
それが言われていると、ビジネスロジックがウィジェット内に座っている時があり、その時点で、適切な単体テストを書くために時間を費やす価値があることができます.
過去に仮想UIでハッキングしようとすると、いくつかの使用可能な結果が得られましたが、このエラーが最近現れたとき、私はより信頼性の高い解決策を探しました.
完全なディスクロージャー、これはほとんどのbrainchildだった、私はちょうど少し簡単に他の開発者の生活をするためにそれを共有するために支援しています.

解決策


私はいつも私のユニットテストのためにtest_helpers.dartファイルを保持しています.
void ignoreOverflowErrors(
  FlutterErrorDetails details, {
  bool forceReport = false,
}) {
  bool ifIsOverflowError = false;
  bool isUnableToLoadAsset = false;

  // Detect overflow error.
  var exception = details.exception;
  if (exception is FlutterError) {
    ifIsOverflowError = !exception.diagnostics.any(
      (e) => e.value.toString().startsWith("A RenderFlex overflowed by"),
    );
    isUnableToLoadAsset = !exception.diagnostics.any(
      (e) => e.value.toString().startsWith("Unable to load asset"),
    );
  }

  // Ignore if is overflow error.
  if (ifIsOverflowError || isUnableToLoadAsset) {
    debugPrint('Ignored Error');
  } else {
    FlutterError.dumpErrorToConsole(details, forceReport: forceReport);
  }
}
私は元の解決策から多少更新しました、それは事前にヌル安全性を書かれました、そして、私もローカル資産をロードしているエラーのチェックで加えました.
このヘルパーが何をしているかは、テストがこれらのエラーのうちの1つに起こるとき、テストランナーが落ちるのを防ぎます.少なくとも、レンダルフレックスの問題はテストでは例外ではないと私は全く愚かに感じます.
単体テストはロジックをテストするために存在します、ヘッドレスの環境の中でどのようにウィジェット塗料はテスト自体にベアリングを持たないべきです.
このヘルパーを使用するには、FlutterError.onError = ignoreOverflowErrors;でテストの一部として含める必要があります
void main() {
  TestWidgetsFlutterBinding.ensureInitialized();

  testWidgets('Widget Renders Correctly', (tester) async {
    FlutterError.onError = ignoreOverflowErrors;

    await tester.pumpApp(const PrimaryHeader(child: Text('Test')));

    final titleFinder = find.text('Test');

    expect(titleFinder, findsOneWidget);
  });
}
それが働くために、それは特定のテストで割り当てられる必要があります、それはsetUpまたはsetUpAllに割り当てられることができません.
私はあなたが面白い、この質問を見つけた場合は、ご質問、コメント、または改善がある場合は、コメントを削除する自由を感じる.をお楽しみくださいフラッターの開発の旅:D
あなたがそれを楽しんだならば、それはものすごいでしょう、そして、あなたが本当にそれを好むならば、cup of coffeeはすばらしいでしょう.
読書ありがとう.
ユニットテストのトピックを実行したい場合は、以下を見てください.