🎃

Flutter 3.0.0 から `flutter test --coverage` でエラーが発生する件

2022/05/16に公開

環境

Flutter 3.0.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ee4e09cce0 (6 days ago) • 2022-05-09 16:45:18 -0700
Engine • revision d1b9a6938a
Tools • Dart 2.17.0 • DevTools 2.12.2

問題

Flutter 3.0.0 から、flutter test --coverage を実行すると下記のようなエラーが大量に発生してテストが完了しない現象が発生するようになりました。flutter test は問題ありません。

unhandled error during test:
/Users/susa/Develop/github-search/test/presentation/components/common/list_loader_test.dart
Shell subprocess crashed with segmentation fault.
#0      FlutterTesterTestDevice.finished (package:flutter_tools/src/test/flutter_tester_device.dart:240:73)
<asynchronous suspension>
#1      Future.any.onValue (dart:async/future.dart:611:5)
<asynchronous suspension>


unhandled error during finalization of test:
/Users/susa/Develop/github-search/test/presentation/components/common/list_loader_test.dart
TestDeviceException(Shell subprocess crashed with segmentation fault.)
#0      FlutterTesterTestDevice.finished (package:flutter_tools/src/test/flutter_tester_device.dart:240:5)
<asynchronous suspension>
#1      FlutterTesterTestDevice.kill (package:flutter_tools/src/test/flutter_tester_device.dart:222:5)
<asynchronous suspension>
#2      FlutterPlatform._startTest.<anonymous closure> (package:flutter_tools/src/test/flutter_platform.dart:485:9)
<asynchronous suspension>
#3      FlutterPlatform._startTest (package:flutter_tools/src/test/flutter_platform.dart:538:11)
<asynchronous suspension>
#4      Future.wait.<anonymous closure> (dart:async/future.dart:521:21)
<asynchronous suspension>
#5      _FlutterPlatformStreamSinkWrapper.close.<anonymous closure> (package:flutter_tools/src/test/flutter_platform.dart:648:7)
<asynchronous suspension>


00:22 +101 -14: loading /Users/susa/Develop/github-search/test/presentation/components/common/list_loader_test.dart [E]                                                                                                                                                                                                
  Shell subprocess crashed with segmentation fault.
  package:flutter_tools/src/test/flutter_tester_device.dart 240:73  FlutterTesterTestDevice.finished
  ===== asynchronous gap ===========================
  dart:async/future.dart 611:5                                      Future.any.onValue

原因

Dart 2.17.0 で導入された enum 拡張の機能を使って name プロパティを上書きして定義していると発生するようです。

下記 Issue で報告がありました。

https://github.com/flutter/flutter/issues/103656

修正方法

本家がいつ直るかわかりませんので、次のように書き換えておいた方が無難です。

エラーが発生する書き方
enum LogLevel {
  debug(name: 'DBUG');

  const LogLevel({
    required this.name,
  });

  final String name; // name プロパティを上書きしている
}

// 利用側
print(LogLevel.debug.name); // "DEBUG"
エラーが発生しない書き方
enum LogLevel {
  debug(label: 'DBUG');

  const LogLevel({
    required this.label,
  });

  final String label;
}

// 利用側
print(LogLevel.debug.label); // "DEBUG"
print(LogLevel.debug.name); // "debug"

この問題の原因にたどり着くまでに 4 時間くらいかかりました。。。。誰かのお役に立てれば幸いです。。

最後に

Flutter 大学という Flutter エンジニアに特化した学習コミュニティに所属しています。オンラインでわいわい議論したり、Flutter の最新情報をゲットしたりできます!ぜひ Flutter 界隈を盛り上げていきましょう!

https://flutteruniv.com?invite_id=9hsdZHg0qtaMIr6RPRulAaRJfA83

Discussion