私はアプリを持っています。それは非常にシンプルで、ウィジェットは1つしかありません。正常に動作していますが、以下を呼び出して統合テストを実行すると:
$ flutter drive --target=test_driver/app.Dart
次のエラーが表示されます。
file:///Users/myuser/flutter/packages/flutter_test/lib/src/accessibility.Dart:8:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui;
^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/binding.Dart:8:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui;
^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/matchers.Dart:8:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui;
^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/matchers.Dart:9:8: Error: Not found: 'Dart:ui'
import 'Dart:ui';
^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/test_pointer.Dart:12:1: Error: Not found: 'Dart:ui'
export 'Dart:ui' show Offset;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/binding.Dart:8:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui show window;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/box.Dart:6:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui show lerpDouble;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.Dart:6:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/editable.Dart:8:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui show TextBox;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/error.Dart:5:8: Error: Not found: 'Dart:ui'
import 'Dart:ui' as ui show Paragraph, ParagraphBuilder, ParagraphConstraints, ParagraphStyle, TextStyle;
^
Stopping application instance.
Driver tests failed: 254
アプリをAndroid Studioから実行すると、正常に実行されます。ただし、上記のコマンドを使用して端末から実行すると、アプリは白い画面を表示し、そこから移動しません。端末でエラーが表示されるまで。
Test_driverがDart:uiのようなフラッターパッケージを見つけられないなどのパスの問題だと仮定すると、test_driverがDart:uiがどこにあるかを確認するにはどうすればよいですか?
統合テストでは、メインアプリコードまたはアプリで実行されるその他のフラッターコードをインポートできません。そうしないと、表示されたエラーで失敗します。
https://flutter.io/cookbook/testing/integration-test-introduction/ を読んでくださいこれがあなたがしたいことであるなら、あなたの実際のドライバーテストが実行されます。それ以外の場合は、メインコードの定数を使用するキー値を使用しないでください(ここで説明したように、 http://cogitas.net/write-integration-test-flutter/ )。
Test_driverファイルにウィジェットをインポートしようとしたため、これらのエラーが発生していました。 find.byWidgetを使用しようとしても、同じエラーが発生しました。
画面上のウィジェットの存在を確認したいので、ウィジェットをインポートするか、find.byWidgetを使用しようとしました。
これらのエラーは非常に似ています
組み込みライブラリ「Dart:ui」は、スタンドアロンVMでは使用できません。
次に、test_driverファイルの画面上のウィジェットの存在を確認するために、find.byKeyValueを使用する必要がありました。たとえば、私のアプリ内のファイルで定義されている次のダミーウィジェットが与えられた場合:
class MyDummyWidget extends StatelessWidget {
MyDummyWidget(): super(key: new Key('MyDummyWidget'));
@override
Widget build(BuildContext context) {
return Center();
}
}
画面に表示されているかどうかを確認するには、test_driver内で次のテストを定義します。
void main() {
group('My tests', () {
FlutterDriver driver;
SerializableFinder myDummyWidget = find.byValueKey('MyDummyWidget');
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
if (driver != null) {
driver.close();
}
});
test('check if MyDummyWidget is being displayed', () async {
await driver.waitFor(myDummyWidget);
});
});
}
キー定義が最初のファイルで必要な定義であり、その後、find.byValueKeyおよびawaitドライバーの定義がテストファイルで不可欠です。
インポートが次のように設定されていることを確認してください。
import 'package:test/test.Dart';
これの代わりに:
import 'package:flutter_test/flutter_test.Dart';
次のように、テストドライバーのコードからpackage:flutter/...へのすべてのインポートを削除します。
import 'package:flutter/widgets.Dart';