ウィジェットのテスト中にオーバーライドするフラッターエラーを実装して、自分のカスタムエラーをチェックする方法を誰かに教えてもらえますか?.
これについて言及しているスニペットをオンラインで見ましたが、すべての実装が失敗します
void main() {
testWidgets('throws an error when scanning unknown term types', (WidgetTester tester) async {
await tester.pumpWidget(injectTestWidget(new ItemScanScreen()));
await tester.enterText(find.byKey(new Key('term')), '');
await tester.tap(find.byIcon(Icons.send));
await tester.pump();
expect(
tester.takeException(),
isInstanceOf<UnrecognizedTermException>(),
reason: 'should have thrown an UnrecognizedTermException error but didn\'t',
);
});
}
上記のコードは、実際にはエラーを「キャッチ」したように見えても、以下のメッセージで失敗します。
The following UnrecognizedTermException was thrown running a test:
Instance of 'UnrecognizedTermException'
...
以下のスニペットのようなことができると読みましたが、それを実装する方法と場所がわかりませんでした。
final errorHandled = expectAsync0((){});
FlutterError.onError = (errorDetails) {
// handle error
errorHandled();
});
これはテスト用のデザインです。 try/catchでロジックをラップするように切り替えてから、「エラーメッセージテキスト」の現在の概念でexpect()を実行しました。例:
try {
throw new UnrecognizedTermException();
} catch (e) {
setState(() => _status = e.errMsg());
}
// then in my test
expect(find.text('Could not determine the type of item you scanned'), findsOneWidget);
以下のコードを本番環境で使用して、サーバーにエラーを記録します。
main.Dart:
import 'Dart:async';
import 'package:flutter/material.Dart';
import 'logging.Dart';
void main() async {
FlutterError.onError = (FlutterErrorDetails details) async {
new ErrorLogger().logError(details);
};
runZoned<Future<void>>(() async {
// Your App Here
runApp(MainApp());
}, onError: (error, stackTrace) {
new ErrorLogger().log(error, stackTrace);
});
}
logging.Dart:
class ErrorLogger {
void logError(FlutterErrorDetails details) async {
//FlutterError.dumpErrorToConsole(details);
_sendToServer(details.exceptionAsString(), details.stack.toString());
}
void log(Object data, StackTrace stackTrace) async {
// print(data);
// print(stackTrace);
_sendToServer(data.toString(), stackTrace.toString());
}
void _sendToServer(String a, String b) async {
// Implementation here
}
}